C sscanf无法使用浮点数

时间:2016-10-16 13:18:16

标签: c scanf

在以下代码中

scanf("%s", input);
sscanf(input," %s %f ", change, &grades);
printf("%s\n", change);
printf("%f", grades);
无论输入如何,

等级将打印为0.00。为什么不sscanf识别浮动格式?

2 个答案:

答案 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