简单的C程序用户输入5个朋友的名字

时间:2013-12-02 17:52:39

标签: c

程序的参数描述如下:创建一个程序,允许用户输入最多五个朋友的名字。使用二维数组来存储朋友的名字。输入每个名称后,用户应该可以选择输入其他名称或打印出一个报告,显示到目前为止输入的每个名称。

我的问题是它会将两个单词的名称存储为两个单独的名称,另外还会打印菜单选项两次。我似乎无法想出这一点,所以任何帮助都会受到赞赏。

以下是代码:

包括

int main(void)

{
char  cName[5][21]= {0};
int x=0;
int  iPick;


printf("Enter the name of 5 people\n\n");


for(x=0;x<=5;x++){
printf("Enter name %d:", x+1);
scanf("%s", cName[x]);



printf("\n\nWould you like to add another name or view current names stored?\n");
printf("1)\tAdd another name\n");
printf("2)\tView names stored\n");
scanf("%d", &iPick);
switch(iPick){
case 1:
    break;
case 2:
    for(x=0;x<=5;x++){
    printf("\nName %d is %s\n",x+1, cName[x]);
        }
}
}
return 0;
}

3 个答案:

答案 0 :(得分:2)

scanf()是关于白色空间的小气。它倾向于在缓冲区中的空格之后保留任何内容,并将其放入下一个可用变量中。

这将导致循环在没有用户输入的情况下运行两次。基本上它第一次完成循环,然后它看到stdin缓冲区中有东西,所以scanf自动选择它并将其用作下一个变量,因此菜单第二次打印...因为程序我认为您输入了两个不同的名称,而不是一个带有空格的名称。

请查看此功能: http://www.cplusplus.com/reference/cstdio/fgets/

答案 1 :(得分:0)

你应该改变你的第一个“for”循环:      for(x = 0; x <5; x ++)

答案 2 :(得分:0)

首先,带有%s格式参数的scanf不允许您输入字符串。它只用于输入一个单词。如果输入是用空格分隔的两个或更多单词,则它们将被视为separeted输入。但是你可以使用gets函数输入一个字符串:

printf("Enter name %d: ", x+1);
gets(cName[x]);

第二个你应该将for条件更改为x&lt; 5以将循环停在第五个名称而不是第六个名称。

最后一想,你不应该在for循环中使用开关,否则如果用户选择打印出名称并且x值仍然低于5,程序将重新开始,直到x值达到5.所以只是检查iPick值,如果它是2打破循环并将打印循环移出第一个。

// Inside the fitst loop
if (iPick == 2) break;

// Out of the first loop
for (x=0; x<5; x++){
   printf("\nName %d is %s\n",x+1, cName[x]);
}

要在此处查看完整的代码http://pastebin.com/nnhYsRh7