2016-05-19 10 views
0

beim Versuch, dieses Programm auszuführen, nur Einzel Line-Ausgangs anstelle von mehreren Linien dargestellt istNur Single Line-Ausgang statt mehrere Linie in C Coming (if/else und Kombination)

#include <stdio.h> 
int main() 
{ 
    int t,i,a; 
    scanf("%d",&t); 
    char n[t]; 
    for(i=0;i<t;i++){ 
     scanf("%c",&n[i]); 
    } 
    for(i=0;i<t;i++){ 
     if ((n[i]=='b')||(n[i]=='B')) {printf("BattleShip\n");} 
     else if ((n[i]=='c')||(n[i]=='C')) {printf("Cruiser\n");} 
     else if ((n[i]=='d')||(n[i]=='D')) {printf("Destroyer\n");} 
     else if ((n[i]=='f')||(n[i]=='F')) {printf("Frigate\n");} 
    } 
return 0; 
} 

Mein Eingang war

3 
B 
c 
D 

Output ich erhielt, war dieses

BattleShip 
+4

Versuchen Sie, Ihren Code in einem Debugger schrittweise zu durchlaufen. Das wird wunderbare Einblicke gewähren. –

+0

Eingabe "3Bcd". oder 'scanf ("% c ", &n[i]);' -> 'scanf ("% c ", &n[i]);' – BLUEPIXY

Antwort

2

scanf("%c", &n[i])lesen kann, also n[0] ist '\n' nach '3', n[1] ist 'B', n[2] ist \n nach 'B'. Add getchar() zu lesen '\n' kann das Problem lösen.

for(i=0;i<t;i++){ 
    getchar(); // <--- read additional '\m' 
    scanf("%c",&n[i]); 
} 
+0

) Die richtige Lösung ist es, '"% c "' durch ''% c "' zu ersetzen. Auf diese Weise ist es nicht Es spielt keine Rolle, wie viele Leerzeichen es gibt.Sie ​​erhalten nur die Nicht-Whitespace-Zeichen – user3386109

+0

@ user3386109 Vielen Dank, Ihr Kommentar hat funktioniert –