Проблема в следующем:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float f = 0.0f;
int n = 0;
n = fscanf(stdin, "%f", &f);
printf("n = %d, f = %f\n", n, f);
return 0;
}
Он печатает:
n = 1, f = 100.0000
Если входная строка:
100 эргов
был предоставлен stdin
. Следующее поведение происходит в gcc (4.8.1) и VS2010 (и ниже). Это ошибка, или я что-то пропустил здесь? Потому что в стандарте c (c89) в разделах 7.19.6.2.19 и 7.19.6.2.20 четко указано, что n должно быть равно нулю из-за ошибки сопоставления.
УПД. просто дополнительная информация:
1) пример из стандарта:
http://port70.net/~nsz/c/c99/n1256.html#7.19.6.2p20 (спасибо Крису Калтеру за ссылку)
2) аналогичный пример для сопоставления отказа, который работает по назначению:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int hex = 0x0;
int n = 0;
n = fscanf(stdin, "%x", &hex);
printf("n = %d, hexVal = %x\n", n, hex);
return 0;
}
если стандартный ввод содержит 0xz, вывод
n = 0, hexVal = 0
strtod
, что, конечно, означает, что вы должны сначала прочитать строку изstdin
. - person M Oehm   schedule 27.10.2014count = 0; // "100e" fails to match "%f"
важно видеть. - person Chris Culter   schedule 27.10.2014