2016-07-11 10 views
1

Ich bin vertraut mit den Grundlagen von C: -scanf ("% d", int) gut gestern, nicht heute. Was ist los?

Es gibt zwei Iterationen von scanf() in diesem Programm. Das erste ist voll funktionsfähig. Die zweite Darstellung tut nichts und beendet stattdessen das Programm und kehrt zur Standard-Befehlszeile zurück.

Auch für Schleife meine zweite druckt nur die ersten vier Zahlen anstelle von 5.

Hier ist der Code:

int main() { 
    int i; 
    int iNum[4] 
    int iMenu = 0; 

    printf("\n\n\tPlease enter five numbers: "); 
    for (i = 0; i < 4; i++) { 
     scanf("%d ", &iNum[i]); 
    } 
    printf("\n\tThank you. Here are your numbers: \n\t"); 

    for (i = 0; i < 4; i++) { 
     printf("%d", iNum[i]); 
    } 
    printf("\n\tMenu:"); 
    printf("\n1\tSort your numbers ascending."); 
    printf("\n2\tSort your numbers descending."); 
    printf("\n3\tQuit program"); 
    printf("\n\nWhat would you like to do?\n\tEnter your option here: "); 
    scanf(" %d", &iMenu); 

    switch (iMenu) { 
     case 1: 
      printf("\nCase1testPrint"); 
      sortAsc(); 
      break; 
     case 2: 
      printf("\nCase2testPrint"); 
      sortDesc(); 
      break; 

. . .//rest of code } 

Sobald das Programm die zweite Scanf erreicht(), um das Programm endet und kehrt zur Eingabeaufforderung zurück.

Das ist verwirrend, und ich habe viele Variationen versucht, was falsch sein könnte. Bitte geben Sie an, was Sie können.

Hier ist, wie es aussieht, wenn ich das Programm ausführen. Beachten Sie meinen Eintrag „1“ erscheint in der Befehlszeile anstelle des Programms:

C:\Users\Cortland\Documents\C projects>gcc arraysort.c 
C:\Users\Cortland\Documents\C projects>a 

     Please enter five numbers: 3 
6 
5 
4 
5 

     Thank you. Here are your numbers: 
     3 6 5 4 
     Menu: 
1  Sort your numbers ascending.  
2  Sort your numbers descending. 
3  Quit program 

What would you like to do? 
     Enter your option here: 
C:\Users\Cortland\Documents\C projects>1 
+3

Ihr Text fordert die Person auf, fünf Zahlen einzugeben, aber Ihr Array hat nur Platz für 4 und Ihr Code erhält nur 4 Zahlen. Aber Ihre Ausgabe scheint zu zeigen, dass sie nach fünf Zahlen fragt. Etwas stimmt hier nicht überein. –

+0

'für (i = 0; i <4; i ++) {' iteriert über 0, 1, 2, 3. warum nicht 4? weil '<' nicht beinhaltet '=' – fukanchik

+1

Das ist nicht dein richtiger Code. Auf der Deklaration von "iNum" fehlt ein Semikolon. (Sie vermissen auch #include ', aber ein laxer Compiler könnte Sie ohne es kompilieren lassen.) Wenn Sie nicht den tatsächlichen Code kopieren und einfügen, der das Problem aufweist, können wir nicht zwischen Fehlern in Ihrem tatsächlichen Code unterscheiden und Fehler, die Sie beim Zusammenfassen eingeführt haben. –

Antwort

0

Es gibt ein paar Fehler.

Zunächst einmal enthält die zweite Zeile Ihrer main() - Funktion einen Syntaxfehler - am Ende sollte ein Semikolon stehen. Dies sollte verhindern, dass Ihr Programm überhaupt kompiliert wird.

Zweitens, obwohl Sie sagen, dass Sie möchten, dass der Benutzer 5 Zahlen eingeben, verwenden Sie Ihre Array und Loops die Nummer 4. Der Grund, dass Ihr Programm noch erlaubt Ihnen fünf Zahlen eingeben, ist jedoch aufgrund, wie Sie haben die Formatierungszeichenfolge in Ihre Aufrufe von scanf() geschrieben. Statt:

scanf("%d ", &iNum[i]); 

Verwendung

scanf("%d", &iNum[i]); 

Hinweis der Mangel an einem Raum am Ende der Formatierungszeichenfolge? Hier kommen Ihre Probleme ins Spiel. Obwohl Sie fünf Zahlen eingeben dürfen, speichert und prüft das Programm nur vier. Die letzte Nummer bleibt im Eingangsstrom hängen - bis zum nächsten Aufruf von scanf(). Dies ruft Ihre letzte Zahl ab, die durch die switch/case-Anweisung (in allen Fällen fehlgeschlagen, da Sie nicht "1", "2" oder "3" eingegeben haben) abgerufen wird und das Programm das Ende von main() und erreicht beendet. Die "1" in der Befehlszeile kommt von dem Versuch, etwas einzugeben, wenn das Programm bereits beendet wurde.

Zusammengefasst:

1: ändern Sie die Nummer in der Erklärung von iNum verwendet und in dem for-Schleife 4 bis 5

3:

2 die fehlenden Semikolon hinzufügen bearbeiten scanf () ruft auf und entfernt Leerzeichen aus den Formatierungszeichenfolgen.

Dies behoben das Problem an meinem Ende.

+0

Vielen Dank für Ihre Antwort. 1. Dies war ein Übertragungsfehler - das Programm hatte die richtige Syntax und hatte keine Probleme beim Kompilieren. 2. Mit 4 anstelle von 5 war ein dummer Fehler, denken 0 gezählt sowohl als erster Index und erste Einheit. Falsch! 3. Der Whitespace war was mich abwarf. Die Absicht war saubere Formatierung, aber das Ergebnis verursachte Fehler. Ich habe den Whitespace von scanf entfernt und unten einen neuen Printf hinzugefügt, aber immer noch in der Schleife, der ein '' 'hinzufügt. Danke Winterweird. – Naltroc

3

Ihre for Schleife liest vier Zahlen, nicht fünf.

Sie geben fünf Zahlen ein. Die ersten vier werden in der for Schleife gelesen. Die fünfte wird gelesen von

scanf(" %d", &iMenu); 

So haben Sie 3 6 5 4 als die vier Zahlen eingegeben, und dann 5 als die Wahl von dem, was zu tun ist. Sie haben uns nicht die gesamte switch-Anweisung gezeigt, aber meine Vermutung ist, dass es den Wert 5 nicht behandelt, und dass es durch fällt und Ihr Programm beendet wird.

(Außerdem sollten Sie immer den Wert von scanf() zurück überprüfen, und einige Maßnahmen ergreifen, wenn es zeigt an, dass der Eingabevorgang ist fehlgeschlagen.)