在以下代码中
scanf("%s", input);
sscanf(input," %s %f ", change, &grades);
printf("%s\n", change);
printf("%f", grades);
无论输入如何,等级将打印为0.00
。为什么不sscanf
识别浮动格式?
答案 0 :(得分:2)
对scanf
的第一次调用是查找由空格分隔的一系列字符。如果你的输入看起来像这样:
test 98.3
然后input
将只包含字符串test
。
如果您想阅读整行文字,以便稍后可以使用sscanf
对其进行解析,请使用fgets
来代替读取一行:
char input[100];
char change[10];
float grades;
fgets(input, 100, stdin);
sscanf(input," %s %f ", change, &grades);
printf("%s\n", change);
printf("%f", grades);
输入:
test 96.5
输出:
test
96.500000
答案 1 :(得分:0)
scanf("%s", str)
从stdin
读取到新行或空格,表示您正在阅读输入change78.12
此处change
是更改字符串值,78.12
是浮点数等级值。当你sscanf(str, "%s %f", change, &grade)
str
有效%s
时,0.00
会有效,因此它只会按更改进行读取,因此没有任何内容可用于等级,因此默认为stdin
。如果您想阅读scanf
然后执行// input format is (separated by whitespace)
// change 78.5
fgets(input, input_length, stdin);
sscanf(input,"%s %f ", change, &grades);
printf("%s\n", change);
printf("%f", grades);
,请执行此操作。
host