为什么在语言C的嵌套循环中跳过scanf()?

时间:2018-06-20 21:15:15

标签: c for-loop scanf

我正在编写一个用于类的程序,要求用户输入2D数组的大小,然后让用户输入数组的值。这是我到目前为止的代码:

#include <stdio.h>

int main(void)
{
    // Setup 
    int N, M;
    int row = 0, col = 0;

    printf("\n");
    printf("This program counts occurences of digits 0 through 9 in an NxM array.\n");
    printf("Enter the size of the array (Row Column): ");
    scanf(" %d %d", &N, &M);

    int array[N][M];     

    // Array Input
    for (row = 0; row < N; row++)
    {    
        printf("Enter row %d: ", row);      
        for (col = 0; col < M; col++); 
        {    
            scanf(" %d", &array[row][col]);
        }   
    }    
    printf("\n");    
    return 0;
}

在编译程序并输入信息时,我遇到的问题是,输入第一行后,跳过第二条和所有随后的scanf()语句,或者跳过整个第二个for循环。这是输入的示例:

This program counts occurences of digits 0 through 9 in an NxM array.
Enter the size of the array (Row Column): 2 6
Enter row 0: 0 1 2 3 4 5
Enter row 1:

然后程序完全结束。我真的不知道为什么要跳过它。我尝试更改scanf()语句中的空格,但是无论我如何更改,都会发生相同的问题。我不确定是否遗漏了我犯的一些愚蠢的错误,或者还有更大的问题。我是编码方面的新手。

2 个答案:

答案 0 :(得分:5)

您只是流浪的分号。尝试更改

for (col = 0; col < M; col++); 
{

收件人:

for (col = 0; col < M; col++)
{

for引入了一个控制下一条语句的语句,该语句可以是以分号结尾的简单语句,另一个控制语句或使用{大括号}的复合语句。在您的代码中,与for关键字相同的行中的分号被视为无效的空语句。这样,该代码只会将循环变量递增适当的次数,只有在该循环继续进行到下一部分之后。

确保启用编译器警告。 (gcc和clang都提供了明确的警告,表明该代码可能无法满足您的意图。)

答案 1 :(得分:0)

for (col = 0; col < M; col++);

这是您在嵌套for循环内编写的内容。但是“;”只是表示代码行的末尾,它只会执行for循环M次,而无需执行任何操作。

将其更改为

for (col = 0; col < M; col++)