scanf函数不使用字符

时间:2017-02-21 15:40:06

标签: c arrays scanf

我只是在C中尝试一个简单的程序,插入一个数组。 我使用了一个scanf函数来接受字符,但似乎编译器只是跳过了那个并且刚刚结束程序。 这是我使用的代码: -

#include <stdio.h>

void main()
{
    int a[50], i, j, m, n, x;
    char ch;
    printf("Enter the no. elements of the array :- ");
    scanf("%d", &m);
    printf("Enter the elements below :- ");
    for (i = 0; i < m; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("The array is :- \n");
    for (i = 0; i < m; i++)
    {
        printf("%d", a[i]);
    }
    printf("\nDo you want to enter an element ? (Y/N)\n");
    scanf("%c", &ch);       // The compiler just skips this along with the      
    while (ch == 'y' || ch == 'Y') // while loop and goes straight to the printf 
    {                   // statement
        printf("The index of the element :- ");
        scanf("%d", &n);
        printf("\nEnter a number :- ");
        scanf("%d", &x);
        for (i = m; i > n; i--)
        {
            a[i] = a[i - 1];
        }
        a[n] = x;
        printf("\nInsert more numbers ? (Y/N)");
        scanf("%c", &ch);
        m = m + 1;
    }
    printf("\nThe array is :- ");
    for (i = 0; i < m; i++)
    {
        printf("%d", a[i]);
    }
}

我使用了变量ch,以便用户可以选择是否插入元素,例如YN

但编译器基本上会跳过第三个scanf函数,即接受char的函数以及while循环。

我只是想知道为什么跳过scanf函数?

1 个答案:

答案 0 :(得分:5)

回到上一个scanf("%d",&a[i]) ,它是最后一个数组成员。

32\n 
^^

如果您输入了输入文件:

scanf

输入将在读取十进制数后在换行符之前等待。

导致问题的scanf("%c", &ch);

%c

它会读取输入中的可用的换行符,这就是为什么它会在隐式执行后跳过该行。

要忽略空格,只需在说明符scanf(" %c",&ch); 之前添加空格,如@xing和@WeatherVane在评论中所述。

foreach (var addedUser in userSelection.ToArray())

C99 7.19.6.2

  

输入空格字符(由isspace函数指定)   是跳过除非规范包含[, c 或n   specifier.250)