以下程序无法正确运行

问题描述 投票:0回答:2

该程序只是简单地迭代一个字符数组,并用初始数组中的值填充另一个二维字符数组。但是程序在运行时没有显示任何输出,控制台只是在等待。

有人可以帮我解决这个问题吗?我知道这应该很简单,但我错过了!

int main()
{
    int i,j;
    char arr1[26][26]={{""}};
    char arr[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    
    for(int i=0;i<26;i++)
    {    
        int j=i;
        do
        {
            arr1[i][j]=arr[j];
            j=(i+1)%26;
        }
        while(j!=i);
    }
    
    for(int i=0;i<26;i++)
    {
        printf("{ ");
        for(int j=0;j<26;j++)
        {
            printf("%c, ",arr1[i][j]);
        }
        printf(" }\n");
    }
    return 0;
}

arrays loops clang do-while
2个回答
0
投票
if i = 0;

    int j=0;  
    do
    {
        arr1[0][0]=arr[0];
        j=1%26;  // 1 % 26 == 1
    }
    while(j!=i); // j ==1, i == 0, 1 !=0 Loop forever

0
投票

使用

arr1
 初始化 
{{""}} 2D 字符数组的方式对于字符数组来说是不正确的,您应该将其留空或使用默认字符(如空格
' '
)初始化它。

并且您在内循环中存在循环条件问题,您正在使用将

do-while
设置为
j
(i+1)%26
循环。这意味着循环将始终至少运行一次,但您可能希望使用具有不同条件的常规
while
循环来正确填充 2D 数组。

试试这个方法:

#include <stdio.h>

int main() {
    char arr1[26][26];
    char arr[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    
    for (int i = 0; i < 26; i++) {    
        int j = i;
        while (arr[j] != '\0') {
            arr1[i][j] = arr[j];
            j = (j + 1) % 26;
        }
    }
    
    for (int i = 0; i < 26; i++) {
        printf("{ ");
        for (int j = 0; j < 26; j++) {
            printf("%c, ", arr1[i][j]);
        }
        printf(" }\n");
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.