gpt4 book ai didi

c - 用ctrl+d结束while循环,scanf?

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:38 25 4
gpt4 key购买 nike

我希望在用户决定用 (Ctrl+d) 结束它之前询问用户他们想写“多少圈”,这是 EOF?

额外的问题:如果我写一个字母,例如“k”,它会向外发送垃圾邮件。我该如何改变它?

#include <stdio.h>
int main ()
{
int i;
int x;

printf("\nHow many circles do you want to write?\n");
scanf("%d", &x);

while(x != EOF)
{
for (i = 1; i <= x; i = i + 1)
{
putchar('o');
}
printf("\nHow many circles do you want to write?"
"(to end program click ctrl+d at the same time!))\n");
scanf("%d", &x);
}
printf("\n\n Bye! \n\n");
return 0;
}

最佳答案

您的程序最大的问题是 scanf 不会将 EOF 读入变量。但是,仅仅解决这个问题并不能使您的程序完全正确,因为您的代码中还有其他问题:

  • 您的代码会 self 重复 - 如果可能,您应该统一处理第一次迭代和后续迭代的代码。
  • 您的代码不会处理无效输入 - 当最终用户输入非数字数据时,您的程序会进入无限循环。
  • 您的代码遵循旧的 C 风格 - 十五年来一直不需要在顶部声明所有变量。您应该在循环内声明循环变量。

以下是解决所有这些缺点的方法:

int x;
for (;;) {
printf("\nHow many circles do you want to write? (to end the program click Ctrl+D at the same time!)\n");
int res = scanf("%d", &x);
if (res == EOF) break;
if (res == 1) {
... // Draw x circles here
} else {
printf("Invalid input is ignored.\n");
scanf("%*[^\n]");
}
}
printf("\n\n Bye! \n\n");
return 0;

关于c - 用ctrl+d结束while循环,scanf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30304368/

25 4 0
文章推荐: html - 从子div内部访问父div的宽度
文章推荐: node.js - 当属性不存在时使用 joi TypeError 验证模式
文章推荐: css -