Что не так с моим кодом на C? Предупреждение о коде C

#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 in scanf , 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, но я предполагаю, что вы новичок, поэтому я все равно объясню это.

Это будет работать так:

  1. цикл for запускается без инициализации ( i инициализируется 2 вне цикла)
  2. условие i <= 3 оценивается как 1 (C не имеет логического значения [true,false], поэтому вместо этого используются числа [0 == false, что-нибудь еще == true])
  3. printf("Hin"); вычисляется -> печатается «Hi n»
  4. i; вычисляется -> i увеличивается до 3
  5. вызывается обновление цикла for (то есть i ) -> i увеличивается до 4
  6. условие i <= 3 оценивается как 0, потому что 4 (значение i ) больше 3
  7. цикл for завершается

Я хочу сказать, что значение i увеличивается дважды в каждом цикле. Так что это то же самое, что и

 for(; i <= 3; i  = 2) {
   scanf("%d", amp;number);
}