c - 简单的 C 程序用户输入 5 个 friend 的名字

标签 c

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

我的问题是它将两个单词的名称存储为两个单独的名称,并且另外打印菜单选项两次。我似乎无法弄清楚这一点,因此我们将不胜感激。

代码如下:

包括

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

最佳答案

scanf() 对空白很敏感。它倾向于在缓冲区中保留空白之后的任何内容,并将其放入下一个可用变量中。

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

改为检查此函数: http://www.cplusplus.com/reference/cstdio/fgets/

关于c - 简单的 C 程序用户输入 5 个 friend 的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334673/

相关文章:

c++ - 预订 "Programming Role Playing Games with DirectX 2nd edition"和更新的 DirectX api

c - 访问 2 位长无符号字符的数字 (C)

arrays - C 中权重 [a]= 数据上的段错误;

c程序输出

c - 如何使用 cmake 检测 c 源文件中的调试版本?

c - 第一次遍历后链表出现段错误

c - 没有 malloc AVR 的共享指针

c - 使用指针作为函数参数来解析网络 'interfaces' 以进行读/写

c - 结构和代码解释

c - 我是否正确应用了严格别名规则?