for循环中的某些声明在每次迭代时都没有执行

时间:2017-06-10 17:30:19

标签: c for-loop

#include<stdio.h>
int main()
{
    int NC=0,k=0;
char mychar;
scanf("%d",&NC);
for(k=0;k < NC;k++)
{ 
printf("\nenter a character:-");
scanf("%c",&mychar);
printf("\n%c",mychar);

}
return 0;
}
第一个printf语句下面的

语句正在for循环的替代迭代中执行。 即。 enter image description here

1 个答案:

答案 0 :(得分:1)

当您在键盘上输入字符时,按一个字符键,然后按 ENTER 。输入流中有两个字符:您输入的字符和换行符。 scanf()在输入流中留下\n个字符。在循环的下一次迭代中,scanf()会拾取此换行符。改为:

scanf(" %c",&mychar);

跳过领先的空白字符,包括换行符。

为了进一步扩展,scanf()从输入流中读取字符。 %c说明符与一个字符匹配,因此第二个字符\n保留在输入流中。通过添加前导空格" %c",您告诉scanf()首先匹配零个或多个空格字符(换行符是空白字符,\t\r),然后匹配另一个字符,然后存储在mychar中。这种方式即使从输入流中读取的下一个字符是换行符,也会跳过它。请注意,大多数转换说明符会自动跳过前导空格字符。那些不是:%c%[]%n