为什么Scanf在拍摄角色时工作很奇怪

Sus*_*mar 2 c whitespace while-loop

程序说明: - 我编写了一个程序,该程序从用户输入无限的字符输入.时间并打印输入的输入.这是程序

#include<stdio.h>
int main()
{
int i=1;
char a;
  while (i!=0)
  {

   printf("Enter %d th value\n",i);
   scanf("%c",&a);
   printf("Entered input is %c\n",a);
    i++;
  }

}
Run Code Online (Sandbox Code Playgroud)

上述方案的产出: -

Enter 1 th value
q
Entered input is q
Enter 2 th value
Entered input is 

Enter 3 th value
r
Entered input is r
Enter 4 th value
Entered input is 

Enter 5 th value
g
Entered input is g
Enter 6 th value
Entered input is 

Enter 7 th value
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该程序正在跳过偶数编号的循环,它仅适用于奇数个"i"值.

我做了什么:-

我整天都在互联网上搜索,最后发现我们必须在scanf中插入%c之前的空格.这是更新后的程序.

 #include<stdio.h>
int main()
{
int i=1;
char a;
  while (i!=0)
  {

   printf("Enter %d th value\n",i);
   scanf(" %c",&a);   //changed lineeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
   printf("Entered input is %c\n",a);
    i++;
  }

}
Run Code Online (Sandbox Code Playgroud)

我没有区别,但我在scanf中的%c之前添加了空格.现在它工作正常.这是输出: -

Enter 1 th value
q
Entered input is q
Enter 2 th value
w
Entered input is w
Enter 3 th value
e
Entered input is e
Enter 4 th value
r
Entered input is r
Enter 5 th value
Run Code Online (Sandbox Code Playgroud)

我的问题: - 究竟发生了什么?我非常渴望知道这个问题.有些人可以详细解释我.我浏览了互联网,但我没有找到任何关于这类问题的解释!

250*_*501 7

您将\n在缓冲区中留下换行符,然后按Enter键输入一个字符.在每次其他迭代中,scanf读取该换行符.

" %c"%c之前的空格将占用包括换行符在内的空格.如果有的话.

  • @ 2501"在%d之前放置一个空格"对`scanf()`没有影响.`scanf("%d",...`与`scanf("%d",...`执行相同.它确实与`scanf("%c",...)有所不同. (2认同)