1

我正在编写一个程序,它应该从用户那里获取一个名称列表,将它们存储在一个数组中,然后在列表中搜索以检查用户输入的下一个名称是否是原始列表的一部分名字。

我遇到的问题是,当我输入姓名列表时,它只会保存输入到列表中的姓氏。这是我遇到问题的代码部分:

#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); 
}
4

3 回答 3

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

参考

于 2012-10-26T04:48:53.580 回答
2

您应该将名称存储到数组中的特定条目中:

scanf("%s", names[i]);
printf("%s\n", names[i]);

还有一些通用问题:

  • 在大多数情况下,像 MAX_NAMES 这样的大写名称用于定义而不是变量
  • scanf 不是一个安全的功能,因为您不能限制它读取和写入的字符数量
于 2012-10-26T04:51:22.177 回答
0

到目前为止,要检查您的条目,您需要从 to 循环0i-1在阅读 into 之后names[i])并检查每个条目与最近的条目。

要比较字符串,您可以使用strcmp

if( strcmp(names[i], names[j]) == 0 ) {
    /* Duplicate name - reboot universe */
}
于 2012-10-26T04:51:36.370 回答