[英]Why scanf or fgetc does not work as expected
以下是我的代码,它没有停止第一个索引,我想知道为什么吗? 与scanf
相同的结果
#include<stdio.h>
void main()
{
int n = 0, i = 0;
char arr[10];
printf("How many characters do u want to enter ");
scanf("%d", &n);
//printf("\n\t%d", n);
for(i = 0; i < n; i++)
{
printf("Enter %d character-->\n",i);
char ch = fgetc(stdin);
arr[i] = ch;
//putchar(arr[i]);
}
i = 0;
printf("You have entered characters are \n");
for(i = 0; i < n; i++)
{
printf("arr[%d] = %c\n", i, arr[i]);
}
printf("\n");
}
当我运行此代码时,我会遵循
How many characters do u want to enter 5
Enter 0 character-->
Enter 1 character-->
程序不等待第一个字符输入。
输入流上有一个结束符,它由scanf("%d",&n)
保留在那里,并由第一个fgetc
读取
与scanf相同的结果
您是否正确使用scanf
? 尝试以下操作(不要错过%c
之前的空格):
for(i = 0; i < n; i++)
{
printf("Enter %d character-->\n",i);
scanf(" %c", &arr[i]);
}
终端往往是行缓冲的,这意味着可以逐行访问流内容。
因此,当fgetc开始从STDIN读取时,它将读取一个字符并留下换行符。 因此,您应该使用scanf()
即scanf(" %c", &arr[i]);
正如库比建议的那样。 否则,您需要丢弃该换行符。 你可以用这个
for(i = 0; i < n; i++)
{
printf("Enter %d character-->\n",i);
char ch = fgetc(stdin); // newline is consumed here
if(ch=='\n')
ch = fgetc(stdin); // you get the expected value
arr[i] = ch;
//putchar(arr[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.