2016-03-29 4 views
-6

Vor dem Posten habe ich fast alles versucht, was jemand auf C erwähnt, um mein Problem zu beheben, und es hat nicht funktioniert (zB: Hinzufügen von fgets & sscanf anstelle von scanf, Hinzufügen von getchar() am Ende (keine gute Praxis), etc., aber nichts hat funktioniertC-Programm - Extra Eintrag zum Beenden des Programms

Dieses kleine Beispiel ist ein Abschnitt des Codes, ich arbeite an einem größeren Projekt (ich schreibe normalerweise ein kleines Segment, so Fehlerbehebung ist einfacher), und ich habe ein seltsames Problem, eine Antwort auf die singuläre Benutzereingabe zweimal eingeben zu müssen, um das Programm auszuführen (und zu beenden). Es spielt keine Rolle, was die zweite Nummer als erste Antwort ist ist der eine Wert und wird in die Datei geschrieben (zB gebe ich '2' ein und dann wird wieder eine Eingabeaufforderung angezeigt, also gebe ich '4' ein, aber nur das Ergebnis für die korrekte Eingabe von '2' wird in die Ausgabedatei eingegeben. Das ganze Programm funktioniert großartig, außer dass ich einen weiteren Wert eingeben muss, damit das Programm ausgeführt wird (und damit endet). Ein Leerzeichen bekommt es nicht, und nur eingeben, bekommt es nicht (es wird weiter auffordern, bis es diesen zweiten Zahleneintrag bekommt). Sie müssen einen Wert eingeben, um das Programm zu beenden. Wer sieht warum (Code folgt)? (FWIW, der Code läuft korrekt und der korrekte Wert wird angegeben und dient dem Zweck meines Programms - wenn ich den erforderlichen Extrawert bei der Eingabeaufforderung einfach anhalten kann).

Interessanterweise, wenn ich die letzte "Rückkehr (0)" aus dem Programm entfernen, wird es den LAST-Wert für x (der zwei Aufforderungen, die ich bekomme) und speichern Sie das Ergebnis in der Ausgabedatei, nicht die erster Eingabewert Lass es in, und es wird das erste speichern.

Ich hatte dieses Problem vorher noch nie und kann nicht den Kopf oder die Ursache davon machen, warum es zwei Antworten auf eine Aufforderung zum Ausführen (und Beenden) des Programms gibt.

Wer sieht etwas, auf das ich offensichtlich blind bin? (Dies ist C, kompiliert unter Linux, und getestet, um anders als das grelle 'doppelte Eingabeaufforderung' zu arbeiten)

Danke.

#include <stdio.h> 
#include <stdlib.h> 

int main() 

{ 

    FILE *encfile; 
    int x; 
    char val001[]="AAAA"; 
    char val002[]="AAAB"; 
    char val003[]="AAAC"; 
    char val004[]="AAAD"; 

    encfile = fopen("encoded.enx","w"); 
         //opens output file "encfile" in write mode 

    printf ("Enter a value from 1 - 4: \n"); 
         //prompts for user choice 
    scanf ("%i\n",&x); 
         //takes value of 1-4 prompt from user 

    if (x == 1) 
         //if input is '1', 

    { 
     fprintf(encfile,"%s\n", val001); 
         //prints val001 to file 'encfile' 
     return (0); 

    } 

    if (x == 2) 
         //if input is '2', 

    { 
     fprintf(encfile,"%s\n", val002); 
         //prints val002 to file 'encfile' 
     return (0); 

    } 

    if (x == 3) 
         //if input is '3', 

    { 
     fprintf(encfile,"%s\n", val003); 
         //prints val003 to file 'encfile' 
     return (0); 

    } 

    if (x == 4) 
         //if input is '4', 

    { 
     fprintf(encfile,"%s\n", val004); 
         //prints val004 to file 'encfile' 
     return (0); 

    } 

    else 
    if ((x << 1) || (x >> 4)) 
         //if input selection is out of range, 

    { 
     printf("You have chosen an invalid number\n"); 
        //prints 'out of range' message 
     return (0); 
    } 

    fclose (encfile); 
        //write file closed 

    return (0);            

} 
+1

Zunächst ist << ein Bitshift-Operator. Sie sollten 'x <1 'statt' x << 1' verwenden. – sikerbela

Antwort

3

Try '\ n' aus der scanf, wie diese zu entfernen:

scanf ("%i",&x); 

Werfen Sie einen Blick auf diese Diskussion für zusätzliche Informationen zur Verwendung von '\ n' in einer scanf:

Using “\n” in scanf() in C

+0

PERFEKT !!! Ich war müde und legte das '\ n' auf diesen scanf und bemerkte es nicht einmal. Wie ich dachte, super-einfaches Problem, das ich übersehen habe (und mein Nachbar, der auch codiert, ist gerade nicht in der Stadt, oder ich hätte zuerst einen Anruf getätigt). – Skeetersaurus

+0

Sie sollten die Antwort akzeptieren, wenn Sie das brauchen. – lukaivicev

Verwandte Themen