所以即时尝试从用户那里获取输入然后将输入放入数组然后清除输入以便它可以获得更多,但我得到的是这些奇怪的符号在这里是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char source[] = "this is the source string";
int main()
{
char people[5][260];
char input[260];
int i, l;
printf("please enter 5 names\n");
for(i=1;i<6;i++)
{
gets(input);
strcpy(people[1], input);
input[260] = '\0';
}
for(l=0;l<6;l++)
printf("%s\n", people[l]);
}
}
答案 0 :(得分:1)
更改
for(i=1;i<6;i++)
{
gets(input);
strcpy(people[1], input);
input[260] = '\0';
}
到
for(i=0;i<5;i++)
{
gets(input);
strcpy(people[i], input);
input[0] = '\0';
}
现在要明确我将循环从0更改为5而不是1到6,因为
数组索引从0开始。
在strcpy函数调用中,您一次又一次地传递相同的值,即1,我将其更改为循环变量i,这是正确的方法。
在您的代码段中,您指定了input[260] = '\0'
的值,这也是错误的。
&#39; \ 0&#39;用于表示字符串的结尾
所以你必须清空你的角色数组
&#39; \ 0&#39;应该分配给数组的第一个索引来表示 数组是空的。
现在在第二个循环中,因为您已经存储了5个名称,所以循环应该从i=0
到i<5
而不是i<6
所以改变
for(l=0;l<6;l++)
printf("%s\n", people[l]);
到
for(l=0;l<5;l++)
printf("%s\n", people[l]);
在最后一个printf语句之后你也使用了一个额外的大括号。删除它,你的代码是固定的。
由于您已将main函数的返回类型用作int
int main()
所以它会返回一个整数值,所以
你应该使用return语句
在最后一个大括号之前
return 0;
您已声明一个名为source[]
的字符数组,其中包含全局范围,但您尚未在代码中的任何位置使用它,因此如果将其删除它会更好。
也正确
使用空格和制表符缩进代码,使其易于理解
,使用代码缩进,您的代码将更具可读性,并且您不会错过任何大括号或使用您在代码中使用的额外代码。
总结一下,您的新代码将如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char people[5][260];
char input[260];
int i, l;
printf("please enter 5 names\n");
for(i=0;i<5;i++)
{
gets(input);
strcpy(people[i], input);
input[0] = '\0';
}
for(l=0;l<5;l++)
printf("%s\n", people[l]);
return 0;
}
答案 1 :(得分:-1)
第一个for循环应该从0
到5
,而不是1
到6
。
非常确定您打算将i
放在括号中,而不是1
:
strcpy(people[1], input);
不要使用gets
或strcpy
;他们不安全。请改用fgets
和strlcpy
或strncpy
。
input[260]
应为input[259]
;元素260超出范围。
在复制字符串之前将input[259]
设置为零,而不是之后。
第二个循环从0
转到6
。同样,它应该从0
转到5
,因为5
是大小为6的数组的最大允许索引。