#c
#c
Вопрос:
#include<stdio.h>
int main(void)
{
int i=2,number;
printf("Enter another number greater than 5':");
scanf("%d",number);
while (number>5);
for (; i<=3; i )
{
printf("Hin");
i;
}
printf("Enter another number greater than 5' to continue the cycle:");
scanf("%d",number);
printf("finish");
return 0;
}
Комментарии:
1. Пожалуйста, отформатируйте свой вопрос. Какое предупреждение вы получаете?
2.
while (number > 5);
это бесконечный цикл, если число больше 5, поскольку вы не меняетесьnumber
внутри цикла.3. Я подозреваю, что вы хотите, чтобы это было во всем вплоть до следующего
scanf
. Но;
в концеwhile
строки это делает пустой цикл.4. Кроме того,
scanf("%d", number);
amp;number
вместо этого должен пройти.5. Вам нужно
amp;number
вместоnumber
inscanf
,while
цикл никогда не завершится,for
цикл никогда не будет выполняться, посколькуi
никогда не станет 3 , цикл будет продолжаться независимо от того, что они вводят (в отличие от того, чтоprintf
говорит предпоследний), и вы увеличиваетеi
в цикле и в третьей частиfor
цикла (хотяциклfor
все равно никогда не запускается). Ваша программа, скорее всего, будет работать, если вы исправите эти логические ошибки. Прочитайте это и попробуйте исправить их.
Ответ №1:
Во-первых, в двух функциях scanf вам нужно добавить amp; к параметру number . Это потому, что amp;number получает адрес number , и значение, введенное пользователем, сохраняется по этому адресу. Кроме того, ваш код никогда не выходит из цикла. Попробуйте так:
#include <stdio.h>
int main(void){
int number;
printf("Enter a number greater than 5: ");
scanf("%d",amp;number);
while (number>5){
for (int i = 0; i<1; i ){
printf("Hin");
}
printf("Enter another number to continue the cycle: ");
scanf("%d", amp;number);
}
printf("finish");
return 0;
}
Помните, что цикл for уже увеличивает счетчик i сам по себе, поэтому оператор i внутри цикла не нужен, если вы хотите напечатать «Привет!» только один раз (даже цикл for бесполезен, если вы хотели напечатать его только один раз, но я думаю, вы сделали это, потому что учитесь).
Ответ №2:
Существует несколько проблем:
1 Неправильное использование scanf
scanf
принимает строку формата, а затем обращается к переменным, чтобы она могла записывать в память, где расположены переменные. Итак, правильное использование
scanf("%d",amp;number);
Лучше всего было бы проверить также возвращаемое значение scanf
. scanf
возвращает количество успешно загруженных аргументов. Итак, в вашем случае
if (scanf("%d", amp;number) != 1) {
// print error message, or something else
}
Если бы аргументов было больше, условие было бы другим
if (scanf("%d %f %c %d", amp;a, amp;b, amp;c, amp;d) != 4) {
// ...
}
2 Бесконечный while
цикл
while (number>5);
является бесконечным циклом, если number
больше 5. number
не изменяется внутри цикла, поэтому условие для while
цикла всегда будет правдивым.
3 Возможно неправильное i
увеличение переменной в for
цикле
// int i = 2;
for (; i<=3; i )
{
printf("Hin");
i;
}
i;
В теле циклов for есть что-то подозрительное. Это не меняет поведение циклов for, но я предполагаю, что вы новичок, поэтому я все равно объясню это.
Это будет работать так:
- цикл for запускается без инициализации (
i
инициализируется2
вне цикла) - условие
i <= 3
оценивается как 1 (C не имеет логического значения [true,false], поэтому вместо этого используются числа [0 == false, что-нибудь еще == true]) printf("Hin");
вычисляется -> печатается «Hi n»i;
вычисляется ->i
увеличивается до 3- вызывается обновление цикла for (то есть
i
) ->i
увеличивается до 4 - условие
i <= 3
оценивается как 0, потому что 4 (значениеi
) больше 3 - цикл for завершается
Я хочу сказать, что значение i
увеличивается дважды в каждом цикле. Так что это то же самое, что и
for(; i <= 3; i = 2) {
scanf("%d", amp;number);
}