Scanf读取错误的值

问题描述 投票:0回答:2

我是C编程语言的新手,我编写了一个简单的代码,可以读取两个“ char”值并将其打印在屏幕上,但是第二个由于奇怪的原因而获得了空值。我的代码出了什么问题?

Char c;
Scanf(“%c”,&c);
Printf(“Value:%c”,c);
Scanf(“%c”,&c);
Printf(“Value:%c”,c);

输出:值:g值:

c input scanf newline c89
2个回答
1
投票

(这是评论,但评论很难格式化)

您的代码没有任何问题(除了无法检查scanf返回的值并处理错误或错误输入之外)。考虑:

#include <stdio.h>
int
main(void)
{
        char c;
        scanf("%c",&c);
        printf("Value:%c",c);
        scanf("%c",&c);
        printf("Value:%c",c);
        return 0;
}
$ gcc a.c
$ printf 'abc' | ./a.out
Value:aValue:b

也许“错误”是您在输入中包含换行符。 (例如,您正在以交互方式输入数据,而忘记了在单击“返回”时会在输入流中插入换行符。)


0
投票

[如果您的目标是读取两个“有趣的”字符,并且如果您不认为空格和换行符之类的空格字符“很有趣”,那么您在[C0 ]旨在使不耐烦的人跳起来:scanf does读取空白字符。

如果您想让%c跳过空白字符,以便scanf会读取下一个非空白或“有趣的”字符,只需在%c之前的格式字符串中包含空格字符即可。

%c
© www.soinside.com 2019 - 2024. All rights reserved.