我有以下程序来取五个用户输入的名称并打印出来。
我需要逐个询问每个名字,然后提示用户打印名称列表或在列表中添加其他名称。名称必须存储在二维数组中,但我不明白为什么不能用常规数组完成。
我的代码接受没有问题的名称,但无法打印任何内容。它包括用于监视错误发生位置的打印测试。测试编号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");
}
}
}
答案 0 :(得分:3)
您不需要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");
答案 1 :(得分:3)
所以这是我的分析
你的错误:
事实上,您声明了2D array
,其中每个xth
索引基本上都是char*
。
names[x]
,则会在char*
的{{1}}元素处获得xth
指针。names
,它将获取names[x][y]
元素的指针,然后将访问它的xth
元素,该元素是一个字符,并且字符数据类型由yth
不是%c
。可能的解决方案:
如果你想逐个字符地打印数组,那么你需要在你的情况下迭代数组大小为51的内部循环,然后你可以使用%s
代替%c
。
或者您可以使用%s
打印整个数组,但在这种情况下不需要内部循环,因为您将一次打印整个数组。
更新代码:
方法#01:
%s
方法#02:
//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");
}
}
希望现在明白。