if 语句之间的 for 循环在 C 中不起作用

问题描述 投票:0回答:1
#include <stdio.h>

int main()
{
    int row, col, i, j;
    char ch;
    printf("Enter the Value of Row or Column: ");
    scanf("%d", &row);
    col = row;
    int mat[row][col];

    for (i = 1; i <= row; i++)
    {
        for (j = 1; j <= col; j++)
        {
            printf("enter the value(%d,%d): ", i, j);
            scanf("%d", &mat[i][j]);
        }
    }

    printf("Principle Diagonal is: [ ");
    for (i = 1; i <= row; i++)
    {
        for (j = 1; j <= col; j++)
        {
            if (i == j)
            {
                printf("%d ", mat[i][j]);
            }
        }
    }
    printf("] \nGeneral Diagonal is: [ ");
    for (i = 1; i <= row; i++)
    {
        for (j = 1; j <= col; j++)
        {
            if (i + j == row + 1)
            {
                printf("%d ", mat[i][j]);
            }
        }
    }
    printf("] \n Type 'u' or 'l' for Upper or Lower Triangular Matrix:");
    scanf("%c ", &ch);

    // upper or lower triangular matrix

    if (ch == 'u')
    {
        for (i = 1; i <= row; i++)
        {
            for (j = 1; j <= col; j++)
            {
                if (i != j && i > j)
                {
                    mat[i][j] = 0;
                }
            }
        }
    }
    else if (ch == 'l')
    {
        for (i = 1; i <= row; i++)
        {
            for (j = 1; j <= col; j++)
            {
                if (i != j && i < j)
                {
                    mat[i][j] = 0;
                }
            }
        }
    }

    // displaying the matrix
    for (i = 1; i <= row; i++)
    {
        for (j = 1; j <= col; j++)
        {
            printf("%d ", mat[i][j]);
        }
        printf("\n");
    }

    return 0;
}

我试图从用户那里获取矩阵的输入...我从用户那里获取字符输入... 他会输入“u”或“l”...... 如果输入是“u”,我将显示上矩阵 如果输入是“l”,我将显示一个较低的矩阵

所以在 if else 语句之间我放置了 for 循环.. 但是这个 for 循环不起作用...... 如果我从 if 语句中拖出 for 循环,它就可以正常工作......

那么,问题出在哪里呢? 我该如何解决这个问题???

c for-loop if-statement nested-loops
1个回答
0
投票

粗略地检查您的代码,最突出的事情之一是所使用的数组索引范围。您可能想深入研究一些与数组相关的 C 编程教程,但首先要指出的是,初始数组元素是元素“0”,而不是“1”。

因此,在检查各种 for 循环时,您可能希望将起始数组元素从“1”更改为“0”并更改范围测试。以下是一些快速重构。

来自

for (i = 1; i <= row; i++)
{
    for (j = 1; j <= col; j++)

for (i = 0; i < row; i++)
{
    for (j = 0; j < col; j++)

在重构代码中的各种“for”循环时,以下是一些示例输出数据。

craig@Vera:~/C_Programs/Console/UpperLower/bin/Release$ ./UpperLower 
Enter the Value of Row or Column: 3
enter the value(0, 0): 1
enter the value(0, 1): 2
enter the value(0, 2): 3
enter the value(1, 0): 4
enter the value(1, 1): 5
enter the value(1, 2): 6
enter the value(2, 0): 7
enter the value(2, 1): 8
enter the value(2, 2): 9
Principle Diagonal is: [ 1 5 9 ] 
General Diagonal is: [ 9 ] 
 Type 'u' or 'l' for Upper or Lower Triangular Matrix:l
1 2 3 
4 5 6 
7 8 9 

这可能更接近您对输入和输出的期望。

所以要带走的主要东西是:

  • 数组,无论是由字符、整数还是其他变量类型组成,都以元素“0”开头。
  • 通常,在评估大小为“x”的数组时使用“for”循环,传统的语句是“for (int i = 0; i < x; x++){ . . . }

所以尝试一下,并深入研究一些好的教程文献。

© www.soinside.com 2019 - 2024. All rights reserved.