Ответ 1
Я не совсем уверен, что это то, что вы ищете, но если ваш вопрос заключается в том, как читать целое число с помощью <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);
Надеюсь, это поможет!