以下代码与第18行进行了评论,给出了这些数据:
1
3 3 1
产量
field 1 1
field 1 2
field 1 3
field 2 1
field 2 2
field 2 3
field 3 1
field 3 2
field 3 3
但是如果我保持原样,它只会每隔一步执行一次scanf(...)。问题在哪里?
#include <stdio.h>
char field[102][102];
main()
{
int t;
scanf("%d",&t);
while (t--)
{
int r, c, n, i, j;
scanf("%d %d %d", &r, &c, &n); // wczytanie liczby wierszy, kolumn, dni
for (i=1; i<=r; i++) // wiersze
{
for (j=1; j<=c; j++) // kolumny
{
printf("field %d %d\n", i, j);
scanf("%c", &field[i][j]); // line 18 here
}
}
}
return 0;
}
答案 0 :(得分:1)
问题在于,当你扫描一个角色时,你实际发送了两个:字母,它被扫描,并且“隐藏”'\ n',下次读取。只需在scanf之后使用getch()来读取(并丢弃)该换行符。
答案 1 :(得分:0)
所以看起来你正在尝试手动填充带有字符的2D数组。
正如BlackBear所提到的,你正在获得一个免费的'\n'
字符,每个scanf()
寻找字符输入。这就是你从用户那里“跳过”输入的原因。如果打印输入字符的ASCII,则可以看到此信息:
printf("field %d %d\n", i, j);
scanf("%c", &field[i][j]); // line 18 here
printf("%d\n", field[i][j]); // This line will print the values as they're going
// into the field array
所以使用它你可以看到类似的东西:
1
2 2 1
field 1 1
10 <-- I didn't enter anything! but there's a ASCII 10 there
field 1 2
h <-- I entered 'h', which is
104 <-- ASCII 104 (in dec)
因此,将此问题与您可以看到的ASCII Table进行比较10就是换行符。
再次使用换行符(每个scanf()
)可以解决问题:
scanf("%d",&t);
getchar();
...
scanf("%d %d %d", &r, &c, &n); // wczytanie liczby wierszy, kolumn, dni
getchar();
...
scanf("%c", &field[i][j]); // line 18 here
getchar();
另外,我想我已经注意到你的变量n
没有被使用。