gpt4 book ai didi

c - 如何在C中要求输入直到ctrl+D

转载 作者:行者123 更新时间:2023-11-30 14:33:49 26 4
gpt4 key购买 nike

我在编写程序来请求输入以计算元音时遇到问题。我的问题是询问输入。在此版本中,程序要求输入并成功计算其元音。但是我想找到一种方法来询问输入,直到用户按下 CTRL+D 然后显示结果。我用过while(scanf("%[^\n]", a) !=EOF)但它陷入了循环。

#include <stdio.h>

int main()
{
char a[150];
int i;
int vowels;
vowels=0;
scanf("%[^\n]", a);
for(i=0; a[i]!='\0'; ++i)
{
if(a[i]=='a' || a[i]=='A' || a[i]=='e' || a[i]=='E' || a[i]=='i' ||
a[i]=='I' || a[i]=='o' || a[i]=='O' || a[i]=='u' || a[i]=='U') {
++vowels;
}
}
printf("Vowels: %d\n",vowels);

return 0;
}

最佳答案

条件 while(scanf("%[^\n]", a)) != EOF 将不起作用。第一次调用 scanf 将消耗新行之前的所有字符,不包括输入缓冲区 a 中的新行。

在下一次调用 scanf 时,代码将看到第一次调用中未消耗的新行,并将立即终止具有零长度 ("") 缓冲区的 scanf。此序列将在第三次、第四次……调用中重复,给用户一种程序卡在循环中的印象,确实如此。

解决问题的几种选择:

  1. 按照尤金·什 (Eugene Sh) 的建议,切换到 fgets/sscanf,或者
  2. 将格式修改为“sscanf("%[^\n], a)”,这将允许代码在读取下一个输入之前跳过空格(包括新行)。
  3. 修改格式为sscanf("%[^\n]%*1[\n]", a),它将读取token(不带换行符),然后跳过字符串后面的新行(如果存在)。

就我个人而言,我会选择#1。但对于这个问题,它们都可以工作。可能#2 是工作量最少的。

关于c - 如何在C中要求输入直到ctrl+D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59144935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com