如何要求输入直到ctrl+;D在C中
我有一个问题,写程序,要求输入计数元音。我的问题是询问输入。在这个版本中,程序请求输入并成功地计算其元音。然而,我想找到一种方法来询问输入,直到用户按下CTRL+D,然后显示结果。我使用了如何要求输入直到ctrl+;D在C中,c,C,我有一个问题,写程序,要求输入计数元音。我的问题是询问输入。在这个版本中,程序请求输入并成功地计算其元音。然而,我想找到一种方法来询问输入,直到用户按下CTRL+D,然后显示结果。我使用了while(scanf(“%[^\n]”,a)!=EOF),但它在循环中阻塞了 #include <stdio.h> int main() { char a[150]; int i; int vowels; vowels=0; scanf("%[^\n]",
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;
}
#包括
int main()
{
chara[150];
int i;
int元音;
元音=0;
scanf(“%[^\n]”,a);
对于(i=0;a[i]!='\0';++i)
{
如果(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'){
++元音;
}
}
printf(“元音:%d\n”,元音);
返回0;
}
条件while(scanf(“%[^\n]”,a))!=EOF
将不起作用。第一次调用时,scanf
将使用新行之前的所有字符,不包括输入缓冲区a
中的新行
在下一次调用scanf
时,代码将看到第一次调用中未使用的新行,并将立即使用长度为零的缓冲区(“”)终止scanf。此顺序将在第3、4、。。。调用,给用户一种程序被阻塞在循环中的印象,实际上是这样的
解决此问题的选项很少:
sscanf(“%%[^\n]]*1[\n]”,a)
,它将读取令牌(不带新行),然后跳过字符串后面的新行(如果有新行)就我个人而言,我会选择#1。但是对于这个问题,它们都会起作用。可能#2是最少的工作量。使用
fgets
并检查它的返回值。在EOF上它将是NULL
。在while循环中包装scanf应该起作用,但很难说,因为您实际上没有包含该代码。包含不包含的代码为您而不是为您的代码而工作。