Я не совсем уверен, что это то, что вы ищете, но если ваш вопрос заключается в том, как прочитать целое число, используя <stdio.h>
, то правильный синтаксис:
int myInt;
scanf("%d", &myInt);
Вам, конечно, потребуется много обработать ошибки, чтобы убедиться, что это работает правильно, но это должно быть хорошим началом. В частности, вам нужно будет обработать случаи, когда
- Файл
stdin
закрыт или сломан, поэтому вы ничего не получите.
- Пользователь вводит что-то недопустимое.
Чтобы проверить это, вы можете получить код возврата из scanf
следующим образом:
int result = scanf("%d", &myInt);
Если stdin
обнаружит ошибку при чтении, result
будет EOF
, и вы можете проверить наличие таких ошибок:
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
Если, с другой стороны, пользователь вводит что-то недопустимое, например текстовую строку для мусора, то вам нужно читать символы из stdin
, пока вы не освоите весь вводящий в заблуждение ввод. Вы можете сделать это следующим образом, используя тот факт, что scanf
возвращает 0, если ничего не было прочитано:
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
if (result == 0) {
while (fgetc(stdin) != '\n') // Read until a newline is found
;
}
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ : В ответ на более подробный вопрос, вот более подходящий ответ. : -)
Проблема с этим кодом в том, что когда вы пишете
printf("got the number: %d", scanf("%d", &x));
Это печать кода возврата из scanf
, который равен EOF
при ошибке потока, 0
, если ничего не было прочитано, и 1
в противном случае. Это означает, что, в частности, если вы введете целое число, это всегда будет печатать 1
, потому что вы печатаете код состояния с scanf
, а не число, которое вы прочитали.
Чтобы исправить это, измените это на
int x;
scanf("%d", &x);
/* ... error checking as above ... */
printf("got the number: %d", x);
Надеюсь, это поможет!