【问题标题】:In C, how to print a string from a multidimensional array?在 C 中,如何从多维数组中打印字符串?
【发布时间】:2016-07-15 20:39:59
【问题描述】:

我有以下程序来获取五个用户输入的名称并将它们打印出来。

我需要逐个询问每个名称,然后提示用户打印名称列表或将另一个名称添加到列表中。名称必须存储在二维数组中,但我不明白为什么不能用常规数组完成。

我的代码可以毫无问题地接受名称,但无法打印任何内容。它包括打印测试以监视错误发生的位置。测试号 6 不打印,所以printf("Name: %s", names[x][y]); 肯定有问题

错误是什么?

#include <stdio.h>

    int main() {
    int x;
    int y;
    char names[5][51] = {{'\0'},{'\0'}};

    printf("Enter the names: ");
    for (x = 0; x <5; x++) {
        printf("\nPrintTest 1");
        for (y = 0; y < 1; y++) {
        printf("\nPrintTest 2");
            scanf("%50s",&names[x][y]);
        }
    }
    printf("\nPrintTest 3");

    for (x = 0; x < 5; x++) {
        printf("\nPrintTest 4");
        for (y = 0; y < 1; y++) {
            printf("\nPrintTest 5");
            printf("Name: %s", names[x][y]);
            printf("\nPrintTest 6");
        }
    }
}

【问题讨论】:

    标签: c arrays multidimensional-array


    【解决方案1】:

    这是我的分析

    你的错误:

    事实上,您声明了一个2D array,其中每个xth 索引基本上是char*

    • 如果您使用names[x],它将在namesxth 元素处获得char* 指针。
    • 如果你使用names[x][y],它将获得xth元素的指针,然后访问它的yth元素,它是一个字符,字符数据类型由%c而不是%s打印。

    可能的解决方案:

    如果要逐字符打印数组,则需要在数组大小上迭代内部循环,在您的情况下为 51,然后您可以使用 %c 而不是 @987654334 打印数组@。

    或者您可以使用%s 打印整个数组但是在这种情况下不需要内部循环,因为您将一次打印整个数组。

    更新代码:

    方法#01:

    //Iterating over all the char*
    for (x = 0; x < 5; x++)
    {
            printf("\nPrintTest 4");
    
            //Use of inner loop - Printing the arrays character by character
            for (y = 0; y < 51; y++)
            {
                printf("\nPrintTest 5");
                printf("Name: %c", names[x][y]);
                printf("\nPrintTest 6");
            }
    }
    

    方法#02:

    //Iterating over all the char*
    for (x = 0; x < 5; x++)
    {
            printf("\nPrintTest 4");
    
            //Printing the arrays without the loop
            printf("\nPrintTest 5");
            printf("Name: %s", names[x]);
            printf("\nPrintTest 6");
    }
    

    希望现在清楚。

    【讨论】:

    • 感谢您的清晰解释以及两种方法的演示。
    • 不客气。我很高兴你解决了你的问题:)
    【解决方案2】:

    y 上不需要嵌套循环:

    char names[5][51];
    printf("Enter the names: ");
    for (int x = 0; x <5; x++) {
        printf("\nPrintTest 1");
        scanf("%50s", names[x]);
        printf("\nPrintTest 2");
    }
    printf("\nPrintTest 3");
    for (int x = 0; x < 5; x++) {
        printf("\nPrintTest 4");
        printf("Name: %s\n", names[x]);
        printf("\nPrintTest 5");
    }
    printf("\nDone.\n");
    

    Demo.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 2016-02-15
      • 2014-12-21
      • 2015-12-13
      • 2015-12-21
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多