C scanf in Endlosschleife ließt falsches Symbol

Tockra

Lt. Commander
Registriert
Dez. 2008
Beiträge
1.058
Hey Leute,

ich habe in folgendem Stück Code ein Problem:
Code:
int main(void) {
    while(1) {
        long long input;
        scanf(" %lld",&input);
        
        if(input <= 0) {
            printf("Ungueltige Eingabe!\n");
            return 1;
        }
        
        printf("%lld = ",input);
        func(input);
        printf("\n");
    }
    return 0;
}

Mein Problem ist, dass wenn ich die Standarteingabe umbiege z.B. auf folgende .txt:

test.txt:
Code:
15
12
1

./prog < test.txt

Nun bekomme ich durch die Endlosschleife eine Endlosausgabe von "1 = ... ".

Gruß
T
 
Du musst den Returnwert von scanf prüfen, um EOF (end of file) zu ermitteln.

int ret;
ret = scanf(" %lld",&input);

if (ret == EOF || input <= 0) {
dosomething();
}
 
Tockra schrieb:
Mein Problem ist, dass wenn ich die Standarteingabe umbiege z.B. auf folgende .txt:
...

"Suffering from Buffering" ...

Never Ever scanf() woanders als in Pseudocode benutzen!
Code:
int main(void) {
   while (1) {
      int n;
      long long input;
      char puffer[512];

      fgets(puffer, sizeof(puffer), stdin);
      n = sscanf(puffer, "%lld", &input);
      if (!n || input <= 0) {
         printf("Ungueltige Eingabe!\n");
         return 1;
      }
      printf("Zahl = %lld", input);
      func(input);
      printf("\n");
   }
   return 0;
}
 
Zuletzt bearbeitet:
Zurück
Oben