我只是在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
,以便用户可以选择是否插入元素,例如Y
或N
。
但编译器基本上会跳过第三个scanf
函数,即接受char
的函数以及while
循环。
我只是想知道为什么跳过scanf
函数?
答案 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)