在C中将用户输入存储到字符串数组中

时间:2012-10-26 04:46:29

标签: c arrays string

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

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

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

3 个答案:

答案 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]);

也很少有一般问题:

  • 像MAX_NAMES这样的大写字母在大多数情况下用于定义而不用于变量
  • scanf不是一个安全的函数,因为你不能限制它读写的字符数量

答案 2 :(得分:0)

要查看目前为止的参赛作品,您需要从0循环到i-1(在阅读names[i]之后),并根据最新版本检查每个参赛作品。

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

if( strcmp(names[i], names[j]) == 0 ) {
    /* Duplicate name - reboot universe */
}