【问题标题】:Why isn't my for-loop printing in the second loop?为什么我的 for 循环不在第二个循环中打印?
【发布时间】:2019-12-23 17:21:07
【问题描述】:

我创建了一个 for 循环,将名称存储在用户选择其大小的数组中,但是当 for 循环运行时,它会跳过第二个 printf 语句。

int NumToDelete;
printf("How much employees do you want to remove?\n");
scanf(" %d", &NumToDelete);
char Name[NumToDelete][25];
for(int i = 0; i < NumToDelete; i++)
{
    fgetc(stdin);      //To stop the program from doing
    printf("Name: ");  //something like this: Name:Name:
    fgets(Name[i], 25, stdin);
}

提示和用户输入应如下所示(如果 NumToDelete 为 3):

Name: Ahmed
Name: John
Name: Bob

但是,在我输入名字“Ahmed”之后,我必须输入第二个名字“John”,然后代码再次显示“Name:”提示。所以控制台中的文本最终看起来像这样:

Name: Ahmed
John
Name: Bob

作为用户输入的名称。提前谢谢你。

【问题讨论】:

  • 你应该在循环之后打印你的名字数组的内容,看看你得到了什么。然后你就会明白为什么CFLSanswer 是正确的。
  • 代码不打印名称。代码打印“名称:”,然后在控制台中输入所有内容。
  • 发布确切输入的内容。
  • 呃,VLA。使用等于或大于 335544 的 NumToDelete 测试您的程序。

标签: c arrays string for-loop stdin


【解决方案1】:

我认为 fgetc 应该在 for 循环之外。试试这个代码:

int NumToDelete;
printf("How much employees do you want to remove?\n");
scanf(" %d", &NumToDelete);
fgetc(stdin);
char Name[NumToDelete][25];
for(int i = 0; i < NumToDelete; i++)
{
    printf("Name: ");
    fgets(Name[i], 25, stdin);
}

原因是fgets 使用其输入中的尾随换行符,而不是前导换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 2021-12-16
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多