为什么我的循环跳过偶数步骤?

时间:2016-11-15 09:05:29

标签: c

#include<stdio.h>

int main()
{
char a[10];
for(int i=0; i<5; i++)
{
   printf("\nEnter a character: ");
   scanf("%c",&a[i]);
}

}

在这个循环中,程序首先正常询问问题。但是在第二个循环中,程序没有给我输入字符的选项,并立即运行第三个循环。

同样,所有偶数迭代都被跳过。

3 个答案:

答案 0 :(得分:1)

我同意@Keine

您应该可以通过在%

之前添加空格来获得预期的输出

更正后的代码

#include<stdio.h>

int main()
{
char a[10];
for(int i=0; i<5; i++)
{
   printf("\nEnter a character: ");
   scanf(" %c",&a[i]);
}

}

SOURCE https://gsamaras.wordpress.com/code/caution-when-reading-char-with-scanf-c/

答案 1 :(得分:0)

在输入的末尾有一个换行符来摆脱它。

%c

注意{{1}}

之前的空格

答案 2 :(得分:0)

您可能会被输入&#34;返回&#34;一个角色后的关键。 这意味着还向程序提供了换行符。那个程序发生了什么。

为避免这种情况,请使用fgets()和sscanf()。

#include<stdio.h>

int main()
{
    int i;
    char a[10], buf[10];
    for(i=0; i<5; i++)
    {
        printf("%d) Enter a character: ", i);
        fflush(stdout);
        fgets(buf, 10, stdin);
        sscanf(buf, "%c", &a[i]);
    }

    for(i=0; i<5; i++)
    {
        printf("%d) Entered character: %c\n", i, a[i]);
    }
}

输出:

0) Enter a character: a
1) Enter a character: b
2) Enter a character: c
3) Enter a character: d
4) Enter a character: e
0) Entered character: a
1) Entered character: b
2) Entered character: c
3) Entered character: d
4) Entered character: e

fflush()在unix中不需要的代码就像系统一样。