1

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

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

在我的头文件中,我声明了一个变量(参见文件onemoretime代码.h),稍后使用用户输入通过scanf(). 由于某种原因,使用该变量的条件无法正常工作,要么返回无限重复的结果,要么不做任何事情。设置了一些断点,发现第一次onemoretimemain()函数中调用,其值不知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("%f\n", 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
}

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

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

4

2 回答 2

4

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

一般来说,这是正确的,但是“在 [情况] 中,正常跳过空白字符被抑制%c” [链接]。

要获得opand onemoretime,我建议使用fgetc( link ) 而不是scanf,并自己处理跳过空格的问题。

于 2013-02-02T06:30:25.777 回答
0

每当您想获得一个字符时,scanf()您必须始终使用一些东西来吸收换行符。您可以做这样的事情scanf("%c\n",&onemoretime);

于 2013-02-02T07:05:22.777 回答