【问题标题】:do ... while loop isn't working in maindo ... while 循环在 main 中不起作用
【发布时间】:2013-05-06 14:55:33
【问题描述】:

我编写了一个简单的程序,其中包含一个计算圆面积的函数。 该程序还询问用户是否要再次计算它,如果输入是'N',则程序应该停止。

这是缩小范围的测试用例:

#include<stdio.h>
#include<string.h>

int main(void)
{
    float r;
    char f;  
    do {    
        printf("Type the radius\n");
        scanf("%f", &r);
        printf("Repeat? [Press N for stop]");
        scanf("%c", &f);
    } while(f != 'N');
    getch();
    return 0;
}

但循环永远不会按预期停止。

你有什么建议吗?

【问题讨论】:

  • “不工作”到底是什么意思?
  • @KaranMer 它就在那里。仔细看,缩进有点挑战性:D
  • @KaranMer 在循环结束时应该是这样吗?
  • 告诉他至少正确对齐
  • 实际上,完美的问题将继续你自己的努力,这将展示你如何尝试解决这个问题,例如“我在第二个scanf 设置了一个断点,但是当我输入N 时,f 的值更改为\n,但我不明白为什么会这样”......类似这样的事情: )

标签: c loops scanf


【解决方案1】:
scanf("%c", &f);

在输入流中留下一个换行符,在下一次迭代中使用。在格式字符串中添加一个空格来告诉 scanf() 忽略空格。

scanf(" %c", &f); // Notice the space in the format string.

【讨论】:

  • 谢谢KingsIndian,非常有用:)
  • 我在这里遇到另一个问题...当我输入数字时,它会给出运行时错误:/我该怎么办??
  • @Anklon scanf() 通常不适合处理不正确的输入。您可以做的最好的事情是检查返回值:if (scanf(" %c", &amp;f) == 1) {/* input reading was successful */} else { /* input failure */}。 scanf() 返回成功扫描的输入数。
  • 这很有用,但我只是想知道,为什么在我的情况下它会导致运行时错误而其他人没有??我使用 Visual Studio 6 的编译器会不会有任何问题
  • @Anklon 运行时错误是什么意思?你的意见是什么?它是怎么失败的?
【解决方案2】:

替换

scanf("%c", &f);

f=getch();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多