C语言 为什么我的二维数组中最大的字符元素没有从内部for循环中打印出来?

mxg2im7a  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(123)

我试图创建一个字符串来存储和打印最大的字符输入,但每次我试图创建嵌套循环时,它都不能正确打印或出现seg.错误。

#include<stdio.h>
#include<string.h>
#define ROWS 5
#define LENGTH 1024

int main(void)
{

    char wordinput[ROWS][LENGTH]; // For storing user input while incrementing with wordcount string.
    int wordcount[ROWS]; // For storing user input to determine largest character string
    char j;

    for(int i = 0; i < ROWS; i++) 
    {
        while(i < ROWS)
        {
            printf("Word %d: ", i + 1); // Add 1 to 'i' so string wordcount string is logical. i.e. Word 1, Word 2, Word 2... instead of Word 0, Word 1, Word 2...
            scanf("%c", wordinput[i][j]);
            i++;
            
                for(int j = 0; j <= i; j++)
                {
                    wordinput[i][j] = wordinput[i][0];
                    printf("Input %s is the largest, and IT IS a palindrome!", &wordinput[i][0]);
                    break;
                }
            
        }
    
        break; 
    }
    return 0;
}

我已经将内部循环函数更改为if语句、while循环,我还更改了数据类型--然而我尝试的所有操作要么不能正确输出,要么出现分段错误。

vmjh9lq9

vmjh9lq91#

您的程式码有许多问题。
首先,你有一个嵌套循环。外层循环迭代i,内层循环迭代j。但是,你在两个循环中使用了相同的变量i。这是不正确的。
第二,您错误地使用了scanf()scanf()需要指向数组第一个元素的指针。您传递的是指向数组第二个元素的指针。这是不正确的。
第三,您在内部循环中使用了wordinput[i][j]。这是不正确的,因为j尚未初始化。
第四,在打印最大的字符串时使用了&wordinput[i][0]。这是不正确的,因为您打印的是字符串的第一个字符,而不是整个字符串。
以下是更正后的版本:

#include<stdio.h>
#include<string.h>
#define ROWS 5
#define LENGTH 1024

int main(void)
{

    char wordinput[ROWS][LENGTH]; // For storing user input while incrementing with wordcount string.
    int wordcount[ROWS]; // For storing user input to determine largest character string

    for(int i = 0; i < ROWS; i++) 
    {
        printf("Word %d: ", i + 1); // Add 1 to 'i' so string wordcount string is logical. i.e. Word 1, Word 2, Word 2... instead of Word 0, Word 1, Word 2...
        scanf("%s", &wordinput[i][0]);
        wordcount[i] = strlen(wordinput[i]);
    }

    int max = 0;
    int max_index = 0;

    for(int i = 0; i < ROWS; i++) 
    {
        if(wordcount[i] > max)
        {
            max = wordcount[i];
            max_index = i;
        }
    }

    printf("Input %s is the largest, and IT IS a palindrome!", &wordinput[max_index][0]);

    return 0;
}

相关问题