#c
#c
Вопрос:
Я пытаюсь запустить приведенный ниже код, но я вхожу в цикл, из которого не могу выйти.
Должно появиться сообщение об ошибке, после чего предполагается, что пользователь сможет ввести правильное значение диапазона.
Может ли кто-нибудь исправить этот бесконечный цикл, чтобы он появлялся только тогда, когда use вводит значение вне диапазона, пожалуйста.
#include<stdio.h>
int main(void) {
int students, counter, total;
int marks[40];
int stdno[40];
total = 0;
printf(" ---=== IPC mark Analyser V2.0 ===---n");
printf("Please enter the number of students(between 3 and 40):");
scanf("%d", amp;students);
while (students < 3 || students >40) {
printf("Invalid number, enter a number between 3 and 40 inclusive:");
scanf("%d", amp;students);
}
printf("Row Std No Mrkn");
printf("--- --------- ---n");
for (counter = 0; counter < students; counter ) {
printf(" _________ ___r");
printf("d ", counter 1);
scanf(" d =", amp;stdno[counter], amp;marks[counter]);
while (marks < 0 || marks >100 || stdno < 10000000 || stdno > 999999999) {
printf("Error: Enter values between 0 and 100 inclusive.n");
scanf(" d =", amp;stdno[counter], amp;marks[counter]);
}
return 0;
}
}
Комментарии:
1. Пожалуйста, сначала правильно отформатируйте свой код.
2. Ваш код слишком плохо отформатирован, чтобы я мог прочитать вопрос.
3. Скомпилируйте со всеми включенными предупреждениями, прочитайте предупреждения, которые выдает компилятор, и обработайте их как ошибки.
4. Подсказка: в этой строке есть серьезная проблема :
while (marks < 0 || marks >100 || stdno < 10000000 || stdno > 999999999)
. Поиск проблемы оставлен в качестве упражнения для читателя.5. проверьте цикл while внутри цикла for в конце. Условие плохо написано, и вам также не хватает скобок в цикле while (я предполагаю, что вы собираетесь печатать И сканировать, как только столкнетесь с условием цикла while)
Ответ №1:
-
Во-первых, условие цикла wile, которое у вас
while (marks < 0 || marks >100 || stdno < 10000000 || stdno > 999999999)
есть, неверно.marks
иstdno
являются массивами и не могут сравниваться с числами. Вы даже получаете предупреждение компилятора за это. Что вам нужно сделать, это сравнить с элементом массиваmarks[counter]
иstdno[counter]
. Это делается для того, чтобы каждое значение, которое вы вводите в цикл, проверялось на соответствие условию. -
Цикл while должен выполняться над двумя операторами,
printf
andscanf
. В вашем текущем коде цикл while будет просто выполнятьсяprintf
каждый раз. Вам нужно иметь фигурные скобки{
вокруг двух операторов.while (marks[counter] < 0 || marks[counter] >100 || stdno[counter] < 100000000 || stdno[counter] > 999999999) { printf("Error: Enter values between 0 and 100 inclusive.n"); scanf(" d =", amp;stdno[counter], amp;marks[counter]); }
Вы можете еще больше улучшить это, напечатав тот же номер выше, чтобы указать пользователю.
while (marks[counter] < 0 || marks[counter] >100 || stdno[counter] < 100000000 || stdno[counter] > 999999999)
{
printf("Error: Enter values between 0 and 100 inclusive.n");
printf(" _________ __r");
printf("d ", counter 1);
scanf(" d =", amp;stdno[counter], amp;marks[counter]);
}