Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2023, 19:37   #1
fuckstrod
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 5
По умолчанию Бесконечный цикл

Всем привет.
в учебнике Дейтлов по "С" Имеется программа, которая считывает оценки A,B,C,D,F пока не будет введено контрольное значение EOF (-1) .
В 15 строчке у них написана такая штука:

while ((grade=getchar())!=EOF)

здесь getchar() считывает, но в результате присваивания grade получает неадекватное целочисленное значение(не то, что ожидается) Например, вводишь 1, целочисленное значение присваивается то как 49, а не 1.
Собственно, поэтому while никогда не закончится. В учебнике написано, что getchar() считывает посимвольно, значит и контрольное значение "-1" она не считает как надо. ОНа сначала съест символ минус, а при повторном проходе съест символ 1. Че за хрень, это ошибка в учебнике, или я что-то не догоняю? Специально скопировал с учебника. Если ошибка, то как лучше здесь поступить?


Сама прога:
Код:
int main()
{
	int grade;
	int aCount = 0;
	int bCount = 0;
	int cCount = 0;
	int dCount = 0;
	int fCount = 0;

	printf("Enter grade.\n");
	printf("Enter EOF for end input\n");
	
	while ((grade=getchar())!=EOF)
	{

		switch (grade)
		{
		case 'A':
		case 'a':
			++aCount;
			break;

		case 'B':
		case 'b':
			++bCount;
			break;

		case 'C':
		case 'c':
			++cCount;
			break;

		case 'D':
		case 'd':
			++dCount;
			break;

		case 'F':
		case 'f':
			++fCount;
			break;

		case'\n':
		case'\t':
		case' ': 
		break;

					default:
					printf("Incorrect input\n");
					printf("Enter new grade\n");
					break;
		}
		
	}
	printf("A: %d\n",aCount);
	printf("B: %d\n",bCount);
	printf("C: %d\n",cCount);
	printf("D: %d\n",dCount);
	printf("F: %d\n",fCount);
	

	return 0;
}
Спасибо
fuckstrod вне форума Ответить с цитированием
Старый 27.01.2023, 20:09   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
Сообщение от fuckstrod Посмотреть сообщение
Например, вводишь 1, целочисленное значение присваивается то как 49, а не 1.
Именно. Вы же вводите символы... погуглите ASCII.

Цитата:
Сообщение от fuckstrod Посмотреть сообщение
Собственно, поэтому while никогда не закончится.
Закончится

Цитата:
Сообщение от fuckstrod Посмотреть сообщение
ОНа сначала съест символ минус, а при повторном проходе съест символ 1
Не будет проходов, никто в консоль -1 не будет печать. Сразу прийдет EOF равный -1.

Цитата:
Сообщение от fuckstrod Посмотреть сообщение
Че за хрень, это ошибка в учебнике, или я что-то не догоняю?
Вы

Цитата:
Сообщение от fuckstrod Посмотреть сообщение
то как лучше здесь поступить?
Почитать теорию
p51x вне форума Ответить с цитированием
Старый 27.01.2023, 20:15   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

EOF == -1 вводиится через Ctrl+Z в консоли Windows или Ctrl+D в консоли UNIX.
macomics вне форума Ответить с цитированием
Старый 28.01.2023, 13:37   #4
fuckstrod
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 5
По умолчанию

p51x, Прежде чем сюда писать, теорию я прочитал и про таблицы ASCII в курсе. Вы говорите, что никто -1 вписывать не будет, но не написали, как ввести EOF иначе. Это сделал комментатор ниже, но не суть. В учебнике, кстати , тоже описано, как вводить EOF и я это пробовал. Это не помогает. Потому как у меня вместо ввода EOF(которое один хрен равно целому "-1") вводится "^Z". Вы хотя бы код этот запускали, прежде чем отвечать?
fuckstrod вне форума Ответить с цитированием
Старый 28.01.2023, 13:42   #5
fuckstrod
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 5
По умолчанию

macomics, ПРи нажатии ctrl+Z вводится это:
Изображения
Тип файла: png вывод.png (14.5 Кб, 0 просмотров)
fuckstrod вне форума Ответить с цитированием
Старый 28.01.2023, 13:58   #6
fuckstrod
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 5
По умолчанию

Так, вроде заработало. Ввел Второй раз EOF и заработало. По началу именно поэтому я и думал, что не работает. Почему-то при первой проверке условия( и вводе EOF) он не выходит из цикла, пока не могу понять, почему.
fuckstrod вне форума Ответить с цитированием
Старый 28.01.2023, 14:02   #7
fuckstrod
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 5
По умолчанию

Странно, заработало. Наверное, какие то ошибки еще были в тот момент, и + меня этот появляющийся символ смутил. Сам дурак, короче. Всем спасибо
fuckstrod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бесконечный цикл Алексей_2012 Общие вопросы Delphi 10 24.04.2013 08:27
бесконечный цикл в программе craabpinguin Общие вопросы C/C++ 2 23.12.2012 22:54
Бесконечный цикл. Тошка Помощь студентам 6 12.03.2011 17:50
Бесконечный цикл. Kingdom_Reborn Помощь студентам 4 11.11.2010 00:18
Бесконечный цикл Эдуард Общие вопросы C/C++ 4 03.04.2008 17:28