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);
}
Zunächst ist << ein Bitshift-Operator. Sie sollten 'x <1 'statt' x << 1' verwenden. – sikerbela