以下是我的代码,并没有停止第一个索引,我想知道为什么?与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-->
程序不会等待第一个字符输入。
答案 0 :(得分:3)
输入流上有一个结束字符由scanf("%d",&n)
留在那里,并由第一个fgetc
scanf
的结果相同
您是否正确使用scanf
?请尝试以下操作(不要错过%c
之前的空格):
for(i = 0; i < n; i++)
{
printf("Enter %d character-->\n",i);
scanf(" %c", &arr[i]);
}
答案 1 :(得分:1)
终端往往是行缓冲的,这意味着流内容可以逐行访问。
因此,当fgetc从STDIN开始读取时,它会读取一个字符并留下换行符。因此,您应该使用Cubbi建议的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]);
}