c - 为什么 Scanf 在获取角色时工作很奇怪

标签 c while-loop whitespace

程序说明:- 我编写了一个程序,它从用户无限号处获取字符输入。次数并打印输入的输入。这是程序

#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++;
  }

}

上述程序的输出:-

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

正如您所看到的,程序正在跳过偶数循环,并且仅适用于奇数个“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++;
  }

}

我没有什么区别,但我在 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

我的问题:- 究竟发生了什么?我很想知道这个问题。有人能详细解释一下吗。我在网上冲浪,但没有找到任何关于此类问题的解释!!

最佳答案

当您按 Enter 键输入字符时,您将在缓冲区中留下一个换行符 \n 字符。在每隔一次迭代时 scanf 都会读取该换行符。

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

关于c - 为什么 Scanf 在获取角色时工作很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547850/

相关文章:

c - sqlite c api插入绑定(bind)

linux - “read”命令不在“while read line”循环中执行

java - while 循环在每次迭代后不更新 i

.net - string.Trim() 会从文件名中删除 *valid* 字符吗?

php - css:如何摆脱文本前后的多余空白?

c - C中内核空间遍历祖先的结束标志

c - "kill"如何成为Pthread?

c - 在头文件中解析 “error: expected identifier”?

python循环异常

ios - 删除字符串开头和结尾的空格