我正在编写一个程序,该程序应该从用户处获取名称列表,将它们存储在一个数组中,然后搜索列表以检查并查看用户输入的下一个名称是否属于原始名单。
我遇到的问题是,当我输入名单列表时,它只保存输入到列表中的姓氏。以下是我遇到问题的代码部分:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX_NAMELENGTH 10
#define MAX_NAMES 5
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH]);
int main()
{
char names[MAX_NAMES][MAX_NAMELENGTH];
initialize(names);
getch();
return 0;
}
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH])
{
int i,Number_entrys;
printf("How many names would you like to enter to the list?");
scanf("%d",&Number_entrys);
if (Number_entrys>MAX_NAMES) {
printf("Please choose a smaller entry");
}
else {
for (i=0; i<Number_entrys; i++){
scanf("%s",names[i]);
}
}
printf("%s",names);
}
答案 0 :(得分:4)
应该阅读scanf("%s",names[i]);
目前,您将其存储为scanf("%s",names);
,相当于scanf("%s",names[0]);
因此,您将在每次传递中覆盖相同的数组条目。
修改强>
此外,当您将char names[][]
传递给函数时,它只将指针传递给第一个元素。您应该声明它的至少一个边界,其值与您声明它的值相同。
int main(){
//To accept 2 names of 2 characters each
char names[2][2];// or char** names;
initialize(names, 2,2);
}
void initialize(char names[][2],const int MAX_NAMES,const int MAX_NAMELENGTH){ .. }
^ syntax error if index not present
(的 Reference 强>)
答案 1 :(得分:2)
您应该将名称存储在数组中的特定条目中:
scanf("%s", names[i]);
printf("%s\n", names[i]);
也很少有一般问题:
答案 2 :(得分:0)
要查看目前为止的参赛作品,您需要从0
循环到i-1
(在阅读names[i]
之后),并根据最新版本检查每个参赛作品。
要比较字符串,您可以使用strcmp
:
if( strcmp(names[i], names[j]) == 0 ) {
/* Duplicate name - reboot universe */
}