цикл scanf до тех пор, пока пользователь ничего не наберет (дважды нажмет Enter), используя цикл while - PullRequest
1 голос
/ 04 июня 2011

Я пытался использовать NULL, но это не работает. Есть идеи?

while (index != NULL) { //what expression must be passed here?
printf("Enter a number\n");
scanf ("%d", &index);
//do some work
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2011

Если вы подумаете об этом, держу пари, вы никогда не видели реальную программу, которая запрашивает у вас подобное мнение. Зачем? Потому что почти невозможно написать их правильно, а еще более невозможно правильно использовать. Работа реальных программ состоит в том, чтобы либо использовать графический интерфейс, либо читать ввод из файла / потока без запроса. Учитывая этот факт, я так и не понял, почему так много программистов-новичков хотят запрашивать ввод данных у пользователя.

Сказав это, может не быть никакого значения, которое вы можете ввести в свой код, чтобы завершить цикл. Являются ли все целочисленные значения допустимым вводом для вашей программы? Если это так, вам нужен какой-то другой способ завершения, например, ввод символа конца файла.

0 голосов
/ 04 июня 2011

Десятичное значение для NULL в ASCII равно 0, поэтому, если вы введете это в свою программу сейчас, оно закончится. Это не то же самое, что символ новой строки (10 в десятичном виде). ​​

В любом случае, scanf () будет продолжаться до тех пор, пока вы не введете значение, поэтому вам нужно будет использовать какое-либо значение Sentinel для условия цикла, например. если вы используете только положительные числа - используйте отрицательные; если у вас есть верхний предел, произвольное значение за пределами этого. В противном случае вам придется сделать это другим способом, например. введите строку и преобразуйте в int, если это не ваш символ выхода / строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...