Я сам изучал C и перерабатывал программу из книги C Primer. Я надеялся, что свежий набор глаз может определить тот самый вопрос, который у меня есть. Как вы можете видеть по моему результату и ожидаемому результату, я бы хотел избавиться от строки «0 - это число». Я считаю, что проблема с циклом while является проблемой, но я не могу избавиться от нее, несмотря на те вариации, которые я пробовал.Целочисленный результат проверки
Выход:
Enter some integers. Enter 0 to end.
1 two 3 0 4
1 is a number.
two is not an integer
3 is a number.
0 is a number.
Ожидаемый результат:
Enter some integers. Enter 0 to end.
1 two 3 0 4
1 is a number.
two is not an integer
3 is a number.
#include <stdio.h>
#include <ctype.h>
int get_int(void); //validate that input is an integer
int main(void)
{
int integers;
printf("Enter some integers. Enter 0 to end.\n");
while (integers != 0)
{
integers = get_int();
printf("%d is a number\n", integers);
}
return(0);
} // end main
int get_int(void)
{
int input;
char ch;
while (scanf("%d", &input) != 1)
{
while (!isspace(ch = getchar()))
putchar(ch); //dispose of bad input
printf(" is not an integer\n");
}
return input;
}// end get_int
Обратите внимание, что ваша петля, записанная в настоящее время, не может быть выполнена вообще. Возможно, что «целые числа» будут содержать 0 до того, как цикл будет выполнен. Использование неинициализированных переменных приводит к ошибкам. Если вы скомпилируете с оптимизацией и предупреждениями, GCC сообщит, что ('gcc -O3 -Wall' должен это сделать, я использую' -Wextra' слишком регулярно). Кстати, IIRC, в Solaris, стек в основном обнуляется, так что будет неплохой шанс, что «целые числа» равны нулю при входе в программу. –