Tag: getchar

理论在getchar()和putchar()函数背后

我正在研究K&R的“C编程语言”,例子1.5让我难过: #include /* copy input to output; 1st version */ int main(int argc, char *argv[]) { int c; while ((c = getchar()) != EOF) putchar(c); return 0; } 我知道’getchar()’需要一个’putchar()’字符来显示。 但是,当我在终端中运行程序时,为什么我可以传递’putchar()’的整行字符来显示?

getchar()!= EOF

我正在从C编程语言书中运行以下程序: #include main() { int c; while((c=getchar()) != EOF) putchar(); } 当我运行这个程序时,我得到一个无法解释的行为。 如果我按以下顺序从命令行输入字符: {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\n’, ‘^D’}然后我得到以下响应打印到屏幕: hello ,输入\n后,程序退出一次^D输入。 但是,当我按如下方式更改序列时: {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘^D’}然后我将以下响应打印到屏幕上: hello ,但是程序不退出。 一旦我进入^D它不应该退出吗? 我必须第二次输入^D才能退出程序。 或者程序仅在我输入^D后退出\n 。 我不明白为什么当我进入^D时程序不会退出。 有什么想法吗? 我在UNIX系统上运行。

C getchar vs scanf

在我正在研究的函数中发现的一段代码让我感到困惑: char GetCommand( void ) { char command; do { printf( “Enter command (q=quit, n=new, l=list): ” ); scanf( “%c”, &command ); Flush(); } while ( (command != ‘q’) && (command != ‘n’) && (command != ‘l’) ); printf( “\n———-\n” ); return( command ); } void Flush( void ) { while ( getchar() != ‘\n’ […]

为什么Ctrl-Z不会触发EOF?

为什么Ctrl + Z不会触发循环来完成以下小程序? #include main() { int c; while ((c = getchar()) != EOF) { //nothing } return 0; } 如果我输入: test^ZEnter ,它不会退出循环。 我发现了相关的问题( 这里和这里 ),但没有解释它在Windows下的C(不是C ++)。 注意 :我在Windows 8.1上使用Visual Studio 2015 PRE

为什么我需要两次键入Ctrl-D来标记文件结尾?

char **query; query = (char**) malloc ( sizeof(char*) ); int f=0; int i=0,j=0,c; while((c=getchar())!=EOF) { if(!isalpha(c)) continue; if(f==1) query=(char**) realloc(query,(i+1)*sizeof(char*)); query[i]=(char*) malloc(sizeof(char)); query[i][j]=c; j++; while( (c=getchar())!=EOF&&c!=’ ‘&&c!=’\t’ ) { query[i]=(char*) realloc(query[i],(j+1)*sizeof(char)); query[i][j]=c; ++j; } query[i][j]=’\0′; printf(“%s\n”,query[i]); if(c==EOF){ break; } ++i; f=1; j=0; } 我希望上面的代码片段读取由空格和制表符分隔的一串字符串,直到ONE EOF,但它需要2个EOF才能结束循环。 此外,字符串只能由字母字符组成。 我在约2天内挣扎。 请提供一些反馈。 编辑:最有可能的原因是我在写完最后一个字符串而不是输入键后按CTRL + D键,但现在我按Enter键然后按CTRL + D,它按预期工作。 但是,在按下最后一个字符串后按CTRL + […]

使用scanf时getchar不会停止

我很难理解getchar() 。 在以下程序中, getchar按预期工作: #include int main() { printf(“Type Enter to continue…”); getchar(); return 0; } 但是,在以下程序中, getchar不会产生延迟,程序结束: #include int main() { char command[100]; scanf(“%s”, command ); printf(“Type Enter to continue…”); getchar(); return 0; } 我有以下我们的解决方法,它有效,但我不明白为什么: #include int main() { char command[100]; int i; scanf(“%s”, command ); printf(“Type Enter to continue…”); while ( getchar() != […]

getc Vs getchar Vs Scanf用于从stdin读取字符

以下三个function: getc getchar&scanf 从stdin读取角色的最佳选择是什么?为什么? 这些function中是否存在任何已知的缺点或限制,使一个function优于另一个function?

在while循环中使用getchar()

#include main() { int c ; while ((c = getchar()) != EOF) { int isEOF = (c==EOF); printf(“is %c EOF: %d “, c, isEOF); } } 为什么printf()方法在每个输入char上被调用两次? 如果我输入’a’,我得到的结果就像 E:\C_workouts>gcc CharIO.c -o CharIO.exe E:\C_workouts>CharIO.exe a is a EOF: 0 is EOF: 0 每次输入都会发生同样的情况。

int c = getchar()?

好的,所以我正在读这本书:C编程语言 – 由Kernighan和Ritchie(第二版)和其中一个例子我很难理解事情是如何工作的。 #include #define MAXLINE 1000 int getline(char line[], int maxline); void copy(char to[], char from[]); int main(int argc, char *argv[]) { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while((len = getline(line, MAXLINE)) > 1) { if(len > max) { max = len; copy(longest, line); } } if(max > 0) […]