2017-11-08 2 views
0

Ich schreibe ein kurzes Programm in C-Sprache, die Benutzer im Grunde fragt, einen geheimen Schlüssel eingeben besteht aus den fünf Zeichen a, b, c, d, r in einer Reihenfolge aufgelistet , jeweils genau einmal, ohne Leerzeichen. Und dann fordert das Programm den Benutzer auf, 7 Buchstaben einzugeben, die auch aus den fünf Zeichen a, b, c, d, r in einer bestimmten Reihenfolge bestehen. Also gibt es eine natürliche Reihenfolge a, b, c, d, r. Also wird jeder Buchstabe, der in den "7 Buchstaben" eingegeben wird, in den verschlüsselten geändert, da der Buchstabe in der natürlichen Reihenfolge in den Buchstaben an der entsprechenden Stelle im geheimen Schlüssel geändert wird. Zum Beispiel, wenn der geheime Schlüssel ist r, b, c, d, a und die 7 Buchstaben sind a, b, b, a, c, c, r. Der verschlüsselte wird r, b, b, r, c, c, a sein. Und der verschlüsselte wird ausgedruckt. Wenn der Benutzer mehr als 7 Buchstaben eingibt, liest das Programm nur die ersten 7 Buchstaben und wenn der Benutzer andere Buchstaben als a, b, c, d, r in den 7 Buchstaben eingibt, wird das Programm einen Fehler melden und beenden.Nicht erreichbarer Code und nicht alle Eingabe lesen

So jetzt schrieb ich das Programm und testete es. Während ich jedoch 3 Stunden damit verbracht habe, es zu debuggen, sagte es immer noch, dass es einige nicht erreichbare Codes gibt und der scanf() scheint nicht alle 7 Buchstaben zu erfassen, die der Benutzer eingibt. Könnte mir jemand helfen, meine Codes zu überprüfen? Danke vielmals.

int main() { 
char natural[5]={'a','b','c','d','r'}; 
char key[5]; 
char word[7]; 
printf("  Enter key: "); 
scanf("%1c%1c%1c%1c%1c",&key[0],&key[1],&key[2],&key[3],&key[4]); 
printf(" Enter word: "); 
int LetterNum; 
LetterNum=scanf("%1c%1c%1c%1c%1c%1c%1c",&word[0],&word[1],&word[2],&word[3], 
&word[4],&word[5],&word[6]); 
for(int i=0;i<LetterNum;i++){ 
if(word[i]!='a'||word[i]!='b'||word[i]!='c'||word[i]!='d'||word[i]!='r'){ 
    printf("You did not speak in ABRACADABRA to me!\n"); 
    return 0; 
    } 
} 

printf("Encrypted word: "); 
char encrypted[LetterNum]; 
for(int i=0;i<LetterNum;i++){ 
for(int x=0;x<5;x++){ 
    if(word[i]==natural[x]) 
      encrypted[i]=key[x]; 
    } 
} 
    for(i=0;i<LetterNum;i++){ 
    printf("%c",encrypted[i]); 
    } 
    printf("\n"); 


} 

Vielen Dank! Ich bin neu in der Sprache C, also wahrscheinlich gibt es einige dumme Fehler, die ich nicht realisiert habe ...

+0

Verwenden' char word [8] (würden Sie einen Debugger verwendet haben, durch das Programm zu dem Schritt, haben Sie diese Texte selbst gefunden) Bitte. –

+4

Ihre ORs sollten ANDs sein ('||' -> '&&') –

+0

Sie müssen neue Zeilen am ersten Eingang konsumieren. – BLUEPIXY

Antwort

0

Die Unreaktivität ist, dass der Compiler analysiert hat, dass die if Anweisung mit den ORs immer wahr sein wird und so die Rückkehr ausführen wird und so ist der Rest unerreichbar. `Und` scanf ("% 8s", Wort) `;

if(word[i]!='a'||word[i]!='b'||word[i]!='c'||word[i]!='d'||word[i]!='r'){ // is always true 

if(word[i]!='a'&&word[i]!='b'&&word[i]!='c'&&word[i]!='d'&&word[i]!='r'){ // is correct 

+0

Vielen Dank Mann! Ich war so dumm und machte solche Fehler lol. Aber könnte ich wissen, warum die scanf() die 7 Buchstaben nicht erfassen kann? Da ich versucht habe, printf ("% c", word [0]) zu schreiben, das gerade der scanf() Anweisung folgt und scheinbar nichts druckt, habe ich nur eine neue Zeile eingegeben. –

Verwandte Themen