C将变量值设置为n



可能重复:
程序不等待用户输入scanf("%c",&yn(;

我刚开始用C语言编程,突然出现了一些奇怪的东西(我在C++中没有遇到(。

在头文件中,我声明了一个变量(请参阅.h文件代码中的onemoretime(,其值稍后将通过scanf()使用用户输入进行设置。出于某种原因,使用变量的条件语句无法正常工作,要么返回无限重复的结果,要么就是什么都不做。我设置了一些断点,发现第一次在main()函数中调用onemoretime时,由于某种原因,onemoretime的值被设置为n

这不是scanf()应该识别的值,但输入被视为新行(显然(。当我输入y时,它应该触发else if条件并循环回main()的开头,Xcode的调试器只简单地说,error: 'y' is not a valid command.

这是我的.h文件:

#ifndef C1_Header_h
#define C1_Header_h
float num1, num2;
char op, onemoretime;
#endif

这是.c文件中的相关代码:

#include <stdio.h>
#include <math.h>
#include "Header.h"
int main(int argc, const char * argv[])
{
    printf("Enter a two-number calculation below:n");
    while (1)
    {
        scanf("%f%c%f", &num1, &op, &num2);
        // addition
        if (op == '+')
        {
            printf("%fn", num1+num2);
            printf("nDone. Would you like to solve another math problem (y/n)?n");
            scanf("%c", &onemoretime);
            while (1)
            {
                if (onemoretime == 'n') 
                {
                    printf("Ok. Terminating program.");
                    return 0;
                }
                else if (onemoretime == 'y') 
                {
                    // loop back to start main function
                }
            }
        }
    }
        // rest of code, irrelevant here
}

如果它是一个因素,将鼠标悬停在Xcode中的onemoretime变量上(显示其基本属性(,则头文件中初始声明之后的每个变量实例都会显示值为n

我做错了什么?onemoretime的值如何由用户设置,而不是在用户到达之前由程序设置?

[n]不是scanf()应该识别的值,[…]

通常情况下是这样,但"在[%c]的情况下]会抑制对空白字符的正常跳过"[link]。

要获得oponemoretime,我建议使用fgetc(链接(而不是scanf,并自行处理跳过的空白。

每当您想用scanf()获得一个单独的字符时,您必须始终使用一些东西来吸收换行符。您可以执行类似scanf("%cn",&onemoretime); 的操作

相关内容

  • 没有找到相关文章

最新更新