【问题标题】:Why Scanf works wierd while taking a character为什么 Scanf 在拍摄角色时工作起来很奇怪
【发布时间】:2014-10-24 12:26:47
【问题描述】:

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

#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

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

【问题讨论】:

标签: c while-loop whitespace


【解决方案1】:

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

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

【讨论】:

  • 程序是否对整数值也一样(“%d”)?如果不是呢?
  • 我不知道清除缓冲区是什么意思?以及如何清除缓冲区?你能帮我吗
  • 感谢您耐心回答我的问题!很好的解释简短而甜蜜!
  • @2501 "在 %d 之前放一个空格" 在scanf() 中无效。 scanf("%d",...scanf(" %d",... 执行相同的操作。 scanf(" %c",... 确实有所不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多