Tag: getchar

C中的EOF问题

我正在编写一个程序,它应该读取两个可以包含换行符和其他各种字符的字符串。 因此,我使用EOF(Ctrl-Z或Ctrl-D)结束字符串。 这适用于第一个变量,但是使用第二个变量,然而,这似乎是有问题的,因为显然某些东西卡在输入缓冲区中而用户无法输入任何内容。 我试着用while (getchar() != ‘\n’);清理缓冲区while (getchar() != ‘\n’); 和几个类似的变化,但似乎没有任何帮助。 所有清洁尝试都导致无限循环,如果没有清洁,添加第二个变量是不可能的。 这两个变量的字符都是在这样的循环中读取的: while((c = getchar()) != EOF) ,这表明它是我在缓冲区中停留的EOF。 或者它是否以其他方式影响程序的行为? 我正在使用的逻辑有什么问题吗? 经过几个小时的挣扎,我开始有点绝望了。 [编辑:下面添加代码] [编辑2:clearerr()似乎使这个EOF解决方案毕竟有效。 它似乎以我在Linux下的原始forms运行,我昨天在Windows上试用它。 码: #include #include int main(void) { int x = 0; int c; char a[100]; char b[100]; printf(“Enter a: “); while((c = getchar()) != EOF) { a[x] = c; x++; } […]

getchar()等效于scanf(“%c”)和putchar()等效于printf(“%c”)?

a = getchar()等效于scanf(“%c”,&a); ? putchar(a)等同于printf(“%c”,a); 其中a是char变量?

如何在获得新输入之前清除stdin?

我已经阅读了大约5-10个不同的建议如何清除标准输入,但它们都不适合我的需要。 问题是fflush(stdin)在我的计算机上工作得很好,但不幸的是它似乎无处不在,所以我需要具有相同function的东西。 我尝试的每一种方式都清除了stdin,当它不是空的时候需要用户输入当stdin是空的时候,这意味着它需要输入片刻我不想得到任何东西(+它无论如何丢弃它)。 问题是:在我需要用户输入之前,我可以以某种方式确定stdin是空的吗? (如果没有,那么,然后才以某种方式清除它?)类似于: if (stdin is NOT empty) while (getchar() != ‘\n’) continue; 编辑:问题是我从stdin逐个加载字符,在某些时候,上一次迭代的输入的一部分可能会或可能不会被丢弃。 无论哪种方式,在我要求用户处理另一个输入之前,我需要有明确的stdin输入。 清除缓冲区本身并不是一件大事,问题是当程序到达清除stdin点时输入为空时会发生什么,因为在那一刻程序需要另一个输入,它将被清除吃掉function。 这就是我想要摆脱的东西。 (当我可以使用fflush(stdin);我只知道,对于我的程序的下一行, stdin将是空的,无论如何,没有问题……)

如何对涉及IO的c函数进行unit testing?

我在将unit testing写入涉及IO操作的C函数时面临问题。 例如,下面是我编写的代码,用于从控制台获取用户的输入字符串。 我不知道如何使用getchar()函数自动测试用户输入。 char * GetStringFromConsole() { char *strToReturn = NULL; int len = 128; strToReturn = (char*)malloc(len); if (strToReturn) { int ch; char *ptr = strToReturn; int counter = 0; for (; 😉 { ch = getchar(); counter++; if (counter == len) { strToReturn = realloc(strToReturn, len*=2 ); ptr = strToReturn + counter-1; […]

什么是标准输入缓冲区?

#include int main(void) { int c; c = getchar(); putchar(c); c = getchar(); putchar(c); c = getchar(); putchar(c); return 0; } 我想了解为什么三次调用的函数只使用一次输入的行。 有人解释说,在这种情况下我们使用标准输入缓冲区,那是一块内存。 我想读一些关于它的东西。 你能告诉我一些资源吗?

关于getchar()循环如何在内部工作的困惑

我已经在下面使用getchar()包含了一个示例程序,供参考(并不是任何人可能需要它),如果您愿意,可以随意解决它的问题。 但我的问题是: 程序调用getchar()时究竟发生了什么 ? 以下是我的理解(请澄清或纠正我): 调用getchar时,它会检查STDIN缓冲区以查看是否有任何输入。 如果没有任何输入,getchar会睡觉。 唤醒后,getchar会检查是否有任何输入,如果没有,则让它自己再次进入睡眠状态。 重复步骤2和3,直到有输入。 一旦有输入(按照约定在结尾处包含’EOF’),getchar返回此输入的第一个字符并执行某些操作以指示下一次调用getchar应该从同一缓冲区返回第二个字母? 我不太确定那是什么。 当除了EOF之外没有其他字符时,getchar是否会刷新缓冲区? 我使用的术语可能不太正确。 #include int getLine(char buffer[], int maxChars); #define MAX_LINE_LENGTH 80 int main(void){ char line[MAX_LINE_LENGTH]; int errorCode; errorCode = getLine(line, sizeof(line)); if(errorCode == 1) printf(“Input exceeded maximum line length of %d characters.\n”, MAX_LINE_LENGTH); printf(“%s\n”, line); return 0; } int getLine(char buffer[], int maxChars){ int […]

getchar()为向上和向下箭头键返回相同的值(27)

因此,对于键盘上的向上键,我得到27,令人惊讶的是,对于向下键我也得到27.我需要我的程序在向上和向下键上表现不同,我似乎无法弄明白。 我正在使用Linux,需要它才能用于Linux。 #include #include #include #include int main() { int c = getchar(); if(c==27) { printf(“UP”); } if(c==28) { printf(“DOWN”); } }

等待在循环中按C键进入?

我正在写一个C程序,我需要等待用户按任意键才能继续。 当我使用getchar(); 它等待按下Enter键。 但是当我在while循环中使用它while ,它不起作用。 如何使我的代码等待按任何键继续循环? 这是我的代码示例。 我正在使用GNU / Linux。 #include #include int main() { int choice; while(1) { printf(“1.Create Train\n”); printf(“2.Display Train\n”); printf(“3.Insert Bogie into Train\n”); printf(“4.Remove Bogie from Train\n”); printf(“5.Search Bogie into Train\n”); printf(“6.Reverse the Train\n”); printf(“7.Exit”); printf(“\nEnter Your choice : “); fflush(stdin); scanf(“%d”,&choice); switch(choice) { case 1: printf(“Train Created.”); break; case 2: […]

无法弄清楚如何使用getchar(); 在C.

#include int main(void) { char F,C; printf(“Do you have a Fever? y/n\n”); F = getchar(); printf(“Do you have a runny nose or cough? y/n\n”); C = getchar(); printf(“Here are the results you input:\n”); printf(“Do you have a fever?”); putchar(F); printf(“\nDo you have a runny nose or cough?”); putchar(C); return 0; } 代码从第一个getchar();输入结果getchar(); 然后退出而不等待更多输入。 这是为什么?

在c上使用getchar()在输入后获得’Enter’

我正在尝试编写一个简单的程序,要求用户从循环中的菜单中进行选择。 我使用getchar()来获取输入,但是我注意到当我输入一个字符并按下’Enter’时,程序会产生两个循环(好像我按两次),一个char作为输入,另一个作为’Enter’作为输入。 我该如何解决? 感谢名单。