LiengEn Skrevet 9. oktober 2008 Del Skrevet 9. oktober 2008 Skal lage et program som dekrypterer en melding fra en fil. Nøkkelen lager brukeren i begynnelsen av programmet, slik: #include <iostream> #include <fstream> using namespace std; int index(char c){ if (c>='a' && c<='z') return c-'a'; return -1; } main(){ char tab[26], c; cout << "Enter the code" << endl; for (c='a'; c<='z'; c++) tab[index(cin.get())]= c; ifstream fin("secret.txt"); while (fin.get(c)){ int n = index(c); if (n>=0) cout << tab[n]; else cout << c; } } Det er i den første for-løkken tullballet begynnet, da den stopper etter bare 13 løkker. Er ganske sikker på at det er noe med setningen tab[index(cin.get())]= c; ... eller (?) Lenke til kommentar
x871kx6167ss7 Skrevet 9. oktober 2008 Del Skrevet 9. oktober 2008 Dersom index() returnerer -1 så vil du vel skrive utenfor arrayen og få en seg-fault eller noe. Lenke til kommentar
GeirGrusom Skrevet 9. oktober 2008 Del Skrevet 9. oktober 2008 Har du ikke tenkt litt feil her? tab arrayet fylles ikke nødvendigvis helt opp; det avhenger av at brukeren bruker alle bokstavene i alfabetet en gang. Men nå vet ikke jeg helt hva du skal frem til... Det kunne også vært en fordel for oss å vite hva koden er, for da er det enklere å tenke seg frem til resultatet av koden. Men som Blackslash sier, så kan det være snakk om en stack overflow, fordi dersom brukeren taster et tegn som mellomrom eller et nummer, så vil det gi en index -1 som fører til udefinert oppførsel av programmet. Nå kan ikke jeg se at du har allokert en variabel før tab, så jeg vet ikke hva som skjer da. Lenke til kommentar
LiengEn Skrevet 10. oktober 2008 Forfatter Del Skrevet 10. oktober 2008 Ja, dette er jo forsåvidt et meget urobust program. Jeg kjører en fil som standard inn som da blir nøkkelen. Filen begynner slik: g u w y r m der a erstatter g, b erstatter u, c erstatter w osv. Filen secret.txt inneholder tekst som er kryptert, dvs. hvis det står "mr", oversettes dette til "fe" funksjonen index skal returnere bokstavens plass i alfabetet som int. Lenke til kommentar
x871kx6167ss7 Skrevet 10. oktober 2008 Del Skrevet 10. oktober 2008 (endret) Nå har jeg veldig lite erfaring med cin.get(), men vil du ikke lese alle whitespace og \n-er? Kanskje det har noe med det å gjøre? Prøv å "debug" litt ved å skrive ut det den leser inn. edit: kopierte programmet ditt, og det er nok pga newlines at det ikke fungerer. Endret 10. oktober 2008 av Blackslash Lenke til kommentar
LiengEn Skrevet 10. oktober 2008 Forfatter Del Skrevet 10. oktober 2008 Ja, jeg har lite peiling på cin.get(), men det merkelige er at løkken stopper alltid etter tretten løkker, uansett hva jeg skriver inn (da mener jeg bokstaver fra a-z). PS: Jeg har brukt den metoden at jeg kjører programmet med en fil som standard inn (med \n) i andre programmer, og dette har fungert smertefritt. Lenke til kommentar
GeirGrusom Skrevet 10. oktober 2008 Del Skrevet 10. oktober 2008 Men som jeg presiserte, så bestemmer tegnene her hvor de blir lagt i tabellen, ikke rekkefølgen. tab[index(cin.get())]= c; Kanskje du er ute etter tab[c-'a']=cin.get() ? Lenke til kommentar
x871kx6167ss7 Skrevet 10. oktober 2008 Del Skrevet 10. oktober 2008 (endret) Ja, jeg har lite peiling på cin.get(), men det merkelige er at løkken stopper alltid etter tretten løkker, uansett hva jeg skriver inn (da mener jeg bokstaver fra a-z). PS: Jeg har brukt den metoden at jeg kjører programmet med en fil som standard inn (med \n) i andre programmer, og dette har fungert smertefritt. Som jeg prøve å si i sted, så leser den inn linjeskift som et tegn, så du må enten skrive alt på en linje eller gjøre sånn at loopen hopper over linjeskift. Og du må nok endre til sånn som geir viser, dersom man forstår koden riktig. Endret 10. oktober 2008 av Blackslash Lenke til kommentar
LiengEn Skrevet 13. oktober 2008 Forfatter Del Skrevet 13. oktober 2008 Ja faen. Jeg må såklart skrive alt på en linje ja Det sto faktisk i boka, men jeg gadd som vanlig ikke å lese så langt Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå