并非所有for循环中的指令都被执行

时间:2012-10-23 18:59:26

标签: c loops for-loop

以下代码与第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;
}

2 个答案:

答案 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没有被使用。