我最近开始学习C。我在使用字符串时遇到一些困难,尤其是在存储名称,短语,单词列表并稍后显示时。这是我的代码:
#include <stdio.h>
int main()
{
char names[3][10];
printf("Type 3 names: \n");
for (int i = 0; i<3; i++)
{
scanf("%10s", names);
}
printf("\n\nName list:\n\n");
for (int j = 0; j<3; j++)
{
for (int k = 0; k<10; k++)
{
printf("%s", names[k][j]);
}
}
return 0;
}
我的目的是存储全名和空格,并在以后显示它们。
运行代码时,程序不会要求输入3个名称,并且不会正确显示已键入的名称。
有关如何解决此问题的任何提示?
答案 0 :(得分:3)
请提高编译器的警告级别。它应该已经警告过您至少两件事:
(20):警告C4477:'printf':格式字符串'%s'需要类型为'char *'的参数,而可变参数1的类型为'int'
(20):警告C4313:'printf':'%s'格式字符串与类型为'int'的参数1冲突
在您的第一个for
循环中,您确实要计数到3
,但是却错过了指定要从stdin
到names[i]
读取的位置。更改
scanf("%10s", names);
到
scanf("%10s", names[i]);
在第二个循环中,不需要嵌套的for
循环,因为printf()
将负责打印char
中的每个names[j]
,直到遇到{{1} }终止字符串。所以改变
'\0'
*)由于参数传递给具有可变长度参数列表的函数而传播到int,而格式字符串for (int j = 0; j<3; j++)
{
for (int k = 0; k<10; k++)
{
printf("%s", names[k][j]); // doesn't match. names[i][j] is a char *)
}
}
导致"%s"
期望指向printf()
的指针。 / p>
到
char
还请注意,由于您要读取的名称最长为10个字符,因此您的数组必须是
for (int j = 0; j < 3; j++)
{
printf("%s\n", names[j]);
}
以适应终止的char names[3][11]; // not [3][10]
字符。