C 做而循环不是';t在主要场所工作

C 做而循环不是';t在主要场所工作,c,loops,scanf,C,Loops,Scanf,我写了一个简单的程序,其中有一个计算圆面积的函数。 程序还会询问用户是否需要再次计算,如果输入是'N',则程序应该停止 下面是缩小的测试用例: #include<stdio.h> #include<string.h> int main(void) { float r; char f; do { printf("Type the radius\n"); scanf("%f", &r);

我写了一个简单的程序,其中有一个计算圆面积的函数。 程序还会询问用户是否需要再次计算,如果输入是
'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;
}
#包括
#包括
内部主(空)
{
浮子r;
字符f;
做{
printf(“键入半径\n”);
scanf(“%f”、&r);
printf(“重复?[按N停止]”;
scanf(“%c”、&f);
}而(f!=“N”);
getch();
返回0;
}
但循环从未像预期的那样停止

你有什么建议吗

scanf("%c", &f);
在输入流中保留换行符,该换行符将在下一次迭代中使用。在格式字符串中添加一个空格,告诉scanf()忽略空白

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

scanf("%c", &f);

f=getch();

“不工作”到底是什么意思?@KaranMer它就在那里。仔细看,缩进有点挑战性:D@KaranMer在循环的最后,就像它应该是的那样?告诉他至少要正确地对齐实际上,完美的问题将继续与你自己的努力,这将显示你如何试图解决这个问题,例如。“我在第二个
scanf
处放置了一个断点,但当我输入N时,
f
的值更改为
\N
,但我不明白为什么会发生这种情况"... 类似这样的:)谢谢KingsIndian,非常有用:)我在这里面临另一个问题。。。当我输入数字时,它会给出运行时错误:/我能做什么???@Anklon
scanf()
通常不太适合处理不正确的输入。最好的方法是检查返回值:
if(scanf(“%c”,&f)==1){/*输入读取成功*/}否则{/*输入失败*/}
。scanf()返回成功扫描的输入数。这很有用,但我只想知道,为什么在我的情况下,它会导致运行时错误,而其他人则不会??我使用visual studio的编译器会有问题吗6@Anklon运行时错误是什么意思?你的输入是什么?它是如何失败的?