getchar () - Funktion in c

Ich habe gerade angefangen zu lernen-I/O Datei-Operationen in c von Programmierung in c von stephen Kochan. In einer der übung Fragen wie die, die unten

Schreiben Sie ein Programm, das zeigt den Inhalt einer Datei auf dem terminal 20 Zeilen zu einem Zeitpunkt. Am Ende jeder 20 Zeilen, die das Programm warten, bis ein Zeichen eingegeben, das terminal. Wenn das Zeichen für den Buchstaben q, das Programm soll stoppen Sie die Anzeige der Datei, alle anderen Zeichen sollte dazu führen, dass die nächsten 20 Zeilen der Datei angezeigt werden.

#include<stdio.h>
int main(void)
{
  int count=0,c;
  FILE *fname;
  char name[64];
  char again='a';
  printf("enter the name of file to be read : ");
  scanf("%s",name);
  if((fname=fopen(name,"r"))==NULL){
    printf("file %s cannot be opened for reading \n",name);
    return 1;
  }
  while(again!='q'){
      count=0;
      while((c=getc(fname))!=EOF)
          {
            if(c!='\n')
              {
                putchar(c);
              }
            else{
              putchar('\n');
              count++;
              printf("count = %i\n",count); //debug statement
              }
            if(count>19)
              break;
          }
      again=getchar();
      printf("again = %c\n",again); //debug statement
    }
fclose(fname);
printf("\n");
return 0;
}

In das obige Programm, wenn ich schaute auf die Ausgabe zunächst war das Programm die Anzeige von 40 zahlen, ohne Pause auf 20 zahlen, also ich habe einige debugging-Anweisungen in der oben, um zu sehen, wohin ich gehe falsch und der Ausgang war ich immer war:

count = 1
2
count = 2
3
count = 3
4
count = 4
5
count = 5
6
count = 6
7
count = 7
8
count = 8
9
count = 9
10
count = 10
11
count = 11
12
count = 12
13
count = 13
14
count = 14
15
count = 15
16
count = 16
17
count = 17
18
count = 18
19
count = 19
20
count = 20
again = //it skipped the loop the first time

21
count = 1
22
count = 2
23
count = 3
24
count = 4
25
count = 5
26
count = 6
27
count = 7
28
count = 8
29
count = 9
30
count = 10
31
count = 11
32
count = 12
33
count = 13
34
count = 14
35
count = 15
36
count = 16
37
count = 17
38
count = 18
39
count = 19
40
count = 20
q
again = **need to input here**

Also für die erste Zeit, die getchar() ist nicht Aufforderung für eine Eingabe. So ersetzte ich den Teil, wo getchar() ist mit:

scanf(" %c",&again);

Es funktioniert, wie erwartet, in Ordnung. Das Programm wird eine Aufforderung für eine Eingabe für die erste Zeit nach dem 20 neue Linien. Ich habe auch Links ein paar Leerzeichen, so dass scanf würde es ignorieren. So langen post kurz zu machen, ich glaube nicht, dass ich verstanden hatte, das Verhalten von getchar() komplett. Ich versuche zu lernen, diese Dinge habe ich selbst Gegoogelt, um eine Erklärung, aber ich kam leer. Jede Hilfe und feedback zu diesem würde sehr geschätzt.

  • getchar gibt einen int, nicht char, denn es muss return EOF, so ändern Sie bitte again zu int
  • aber es gab Programme, in denen getchar() wird verwendet, um das nächste Zeichen aus dem user?
  • ich habe es geändert, aber es ist immer noch das gleiche Verhalten
InformationsquelleAutor yash | 2016-04-26
Schreibe einen Kommentar