Gå til innhold

Løkke som stopper før den skal


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 av Blackslash
Lenke til kommentar

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
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 av Blackslash
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...