Member 13548331 Ответов: 3

Почему я не могу зациклиться в этой программе


#include <stdio.h>

int main(void)
{

	int grade;
	unsigned int counter;
	int pass;
	int fail;

	pass = 0;
	counter = 1;


	do{
	while (counter <=10)
	{
	
	printf("Enter student's result (1=pass, 2=fail)\n\n");
	scanf("%d", &grade);

	if (grade == 1) 
	{pass = pass + 1;}		

	counter = counter + 1;

	}
	if (pass > 8)
		printf("Good job instructor!\n");
	else printf("default\n");
	}while(1 != pass, 2 != fail);

	
		system("pause");


		return 0
		;

}


Что я уже пробовал:

Улучшите программу для проверки ее входных данных. На любом входе, если введенное значение равно
кроме 1 или 2, Продолжайте цикл, пока пользователь не введет правильное значение.

PIEBALDconsult

Пожалуйста, переформатируйте свой код, чтобы отступ был последовательным.

[no name]

Не забудьте также инициализировать "int fail" перед его использованием...

3 Ответов

Рейтинг:
2

OriginalGriff

Вероятно, вы имеете в виду либо то, либо другое:

}while(pass != 1 && fail != 2);
Где "&&" означает "и": и левая, и правая части должны быть истинными, чтобы все условие было истинным.
}while(pass != 1 || fail != 2);
Где "||" означает "или": если одна из левых и правых сторон истинна, то все условие истинно.
Запятая "ломает" оператор, и результатом будет правая сторона - левая сторона не имеет значения в возвращаемом значении.


Рейтинг:
2

Patrice T

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию.

#include <stdio.h>

int main(void)
{

	int grade;
	unsigned int counter;
	int pass;
	int fail;

	pass = 0;
	counter = 1;


	do{
		while (counter <=10)
		{

			printf("Enter student's result (1=pass, 2=fail)\n\n");
			scanf("%d", &grade);

			if (grade == 1)
			{pass = pass + 1;}

			counter = counter + 1;

		}
		if (pass > 8)
			printf("Good job instructor!\n");
		else printf("default\n");
	}while(1 != pass, 2 != fail);


	system("pause");


	return 0
	;

}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]

Совет: используйте последовательный стиль при написании кода, это также поможет чтению.
Совет: всегда инициализируйте переменную перед ее использованием вы пытаетесь проверить значение fail, но никогда не придавали ему значения .
Совет: не упаковывайте много вещей в одну строку, это делает вещи более трудными для чтения без каких-либо преимуществ.


Рейтинг:
0

Richard MacCutchan

}while(1 != pass, 2 != fail);

это неверное утверждение. И гораздо лучше поместить переменную слева от оператора.


PIEBALDconsult

Мне кажется, что это действительно C/C++, но, вероятно, не то, что было задумано.

Richard MacCutchan

Он был помечен как C#, когда я писал это; я должен был изменить свой ответ. Но в контексте вопроса это определенно неверно. Тем более что переменная fail никогда не обновляется.

PIEBALDconsult

А, ладно. Я знаю , что в C# нет оператора запятой, как в C/C++, поэтому я дважды проверил тег.

Richard MacCutchan

На самом деле это был довольно очевидный код C, если я правильно посмотрел.

PIEBALDconsult

Вы хотите сказать, что не ставите includes в свой C#? :D

Richard MacCutchan

О да, но, как ни странно, они не всегда срабатывают. :/

PIEBALDconsult

Что, несомненно, должно быть компилятор виноват.