为什么我的程序在第一个 for 循环之后结束?
Why is my program ending after the first for loop?
我正在编写一个程序来计算幻方,但我无法让输入正常工作。我很确定我正在用值填充数组,但它在前两个 for 循环之后立即结束。后两个应该打印数组,但程序在输入数据后立即结束。我把循环放错地方了吗?
#include <stdio.h>
#define SIZE 15
int main(){
declareArray();
return 0;
}
int declareArray(){
int rowNumber = 0;
int dimension=0;
int arr[SIZE][SIZE] = {0};
int col = 0;
int row = 0;
printf("Please enter the dimension of the square: ");
scanf("%d", &dimension);
arr[dimension][dimension];
for(row; row<dimension; ++row)
for(col; col<dimension; ++col){
printf("Please enter the data for row %d: ", ++rowNumber$
scanf("%d", &arr[row][col]);
}
for(row; row<dimension; ++row){
for(col; col<dimension; ++col){
printf("%d", arr[row][col]);
}
}
return 0;
}
我的输入是:
3
123
456
789
我的预期输出是
123
456
789
我得到的是:
123
0
0
456
0
0
789
0
0
您需要在for
循环的第一部分写入初始值。所以而不是
for(row; row<dimension; ++row)
和
for(col; col<dimension; ++col)
使用
for(row = 0; row < dimension; ++row)
和
for(col = 0; col < dimension; ++col)
同样很重要,你需要重新初始化变量row
和col
,然后才能在第二个循环中使用它们。现在,当你到达第二个循环(打印循环)时,row
和 col
已经等于第一个循环(读取循环)的 dimension
,所以你永远不会进入第二个循环
for(row = 0; row<dimension; ++row)
{
for(col = 0; col<dimension; ++col)
{
printf("%d", arr[row][col]);
}
}
最后,你的程序应该是这样的:
#include <stdio.h>
#define SIZE 15
int main(){
declareArray();
return 0;
}
int declareArray(){
int rowNumber = 0;
int dimension=0;
int arr[SIZE][SIZE] = {0};
int col = 0;
int row = 0;
printf("Please enter the dimension of the square: ");
scanf("%d", &dimension);
arr[dimension][dimension];
for(row=0; row < dimension; ++row)
for(col=0; col < dimension; ++col){
printf("Please enter the data for row %d: ", ++rowNumber);
scanf("%d", &arr[row][col]);
}
for(row=0; row < dimension; ++row){
for(col=0; col < dimension; ++col){
printf("%d", arr[row][col]);
}
}
return 0;
}
注意 :我认为你应该更改声明
printf("Please enter the data for row %d: ", ++rowNumber);
至:
printf("Please enter the data for element %d: ", ++rowNumber);
和你的变量 rowNumber
到 elementNumber
,因为你读取每个框的元素,而不是行。
您没有正确初始化循环变量,当前几个循环完成时,它们的(col
和 row
)值已经等于 dimension
,这使循环条件无效第二对循环
第一次循环后,您需要将行和列重置为 0:
for(row = 0; row<dimension; ++row)
for(col = 0; col<dimension; ++col)
{
printf("Please enter the data for row %d: ", ++rowNumber$
scanf("%d", &arr[row][col]);
}
for(row = 0; row<dimension; ++row)
{
for(col = 0; col<dimension; ++col)
{
printf("%d", arr[row][col]);
}
}
保持在循环中初始化计数器变量的习惯,否则会很危险。
我正在编写一个程序来计算幻方,但我无法让输入正常工作。我很确定我正在用值填充数组,但它在前两个 for 循环之后立即结束。后两个应该打印数组,但程序在输入数据后立即结束。我把循环放错地方了吗?
#include <stdio.h>
#define SIZE 15
int main(){
declareArray();
return 0;
}
int declareArray(){
int rowNumber = 0;
int dimension=0;
int arr[SIZE][SIZE] = {0};
int col = 0;
int row = 0;
printf("Please enter the dimension of the square: ");
scanf("%d", &dimension);
arr[dimension][dimension];
for(row; row<dimension; ++row)
for(col; col<dimension; ++col){
printf("Please enter the data for row %d: ", ++rowNumber$
scanf("%d", &arr[row][col]);
}
for(row; row<dimension; ++row){
for(col; col<dimension; ++col){
printf("%d", arr[row][col]);
}
}
return 0;
}
我的输入是:
3
123
456
789
我的预期输出是
123
456
789
我得到的是:
123
0
0
456
0
0
789
0
0
您需要在for
循环的第一部分写入初始值。所以而不是
for(row; row<dimension; ++row)
和
for(col; col<dimension; ++col)
使用
for(row = 0; row < dimension; ++row)
和
for(col = 0; col < dimension; ++col)
同样很重要,你需要重新初始化变量row
和col
,然后才能在第二个循环中使用它们。现在,当你到达第二个循环(打印循环)时,row
和 col
已经等于第一个循环(读取循环)的 dimension
,所以你永远不会进入第二个循环
for(row = 0; row<dimension; ++row)
{
for(col = 0; col<dimension; ++col)
{
printf("%d", arr[row][col]);
}
}
最后,你的程序应该是这样的:
#include <stdio.h>
#define SIZE 15
int main(){
declareArray();
return 0;
}
int declareArray(){
int rowNumber = 0;
int dimension=0;
int arr[SIZE][SIZE] = {0};
int col = 0;
int row = 0;
printf("Please enter the dimension of the square: ");
scanf("%d", &dimension);
arr[dimension][dimension];
for(row=0; row < dimension; ++row)
for(col=0; col < dimension; ++col){
printf("Please enter the data for row %d: ", ++rowNumber);
scanf("%d", &arr[row][col]);
}
for(row=0; row < dimension; ++row){
for(col=0; col < dimension; ++col){
printf("%d", arr[row][col]);
}
}
return 0;
}
注意 :我认为你应该更改声明
printf("Please enter the data for row %d: ", ++rowNumber);
至:
printf("Please enter the data for element %d: ", ++rowNumber);
和你的变量 rowNumber
到 elementNumber
,因为你读取每个框的元素,而不是行。
您没有正确初始化循环变量,当前几个循环完成时,它们的(col
和 row
)值已经等于 dimension
,这使循环条件无效第二对循环
第一次循环后,您需要将行和列重置为 0:
for(row = 0; row<dimension; ++row)
for(col = 0; col<dimension; ++col)
{
printf("Please enter the data for row %d: ", ++rowNumber$
scanf("%d", &arr[row][col]);
}
for(row = 0; row<dimension; ++row)
{
for(col = 0; col<dimension; ++col)
{
printf("%d", arr[row][col]);
}
}
保持在循环中初始化计数器变量的习惯,否则会很危险。