我正在编写一个用于类的程序,要求用户输入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()语句中的空格,但是无论我如何更改,都会发生相同的问题。我不确定是否遗漏了我犯的一些愚蠢的错误,或者还有更大的问题。我是编码方面的新手。
答案 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++)