C новичку не удается найти синтаксическую ошибку - PullRequest
4 голосов
/ 20 февраля 2010

У меня проблемы с поиском ошибки в следующем коде:

#include <stdio.h>
#define LOOP    0
#define ENDLOOP 1
main()
{
  int c, loop;
  loop = LOOP;
    while ((c = getchar()) loop != ENDLOOP) {
      if (c == 'e'|| c == 'E') {
        printf ("END LOOP\n");
        loop = ENDLOOP;
      }
      else if (c == 'c' || c == 'C')
        printf ("Cheese\n");
      else 
        printf ("Not Cheese\n");
    }
}

Терминал выдаёт мне эту ошибку:

1-1.c: In function ‘main’:
1-1.c:8: error: syntax error before ‘loop’
1-1.c: At top level:
1-1.c:13: error: syntax error before ‘else’

Ответы [ 5 ]

5 голосов
/ 20 февраля 2010

У вас проблема здесь:

((c = getchar()) loop != ENDLOOP)

Должно быть:

((c = getchar()) && loop != ENDLOOP)

Я бы рекомендовал написать это совершенно по-другому:

#include <stdio.h>
int main()
{
    int c;
    while (c = getchar()) {
        if (c == 'e' || c == 'E') {
            printf ("END LOOP\n");
            break;
        }
        if (c == 'c' || c == 'C') {
            printf ("Cheese\n");
        } else {
            printf ("Not Cheese\n");
        }
    }
    return 0;
}

Я думаю, что у этого пути меньше шансов ошибиться. Вы также можете рассмотреть возможность использования tolower.

4 голосов
/ 20 февраля 2010

Возможно, вам не хватает оператора?

while ((c = getchar()) && loop != ENDLOOP) {
3 голосов
/ 20 февраля 2010

По крайней мере одна ошибка в том, что вам не хватает оператора здесь:

 while ((c = getchar()) loop != ENDLOOP)

Я предполагаю, что вы имеете в виду "И", и поэтому оно должно быть:

 while ((c = getchar()) && loop != ENDLOOP)
2 голосов
/ 20 февраля 2010

Вы можете избавиться от уродливой условной loop != ENDLOOP и упростить вашу программу в процессе.

#include <stdio.h>

int main()
{
   int c;
   while (EOF != (c = getchar())) {
      if (c == 'e'|| c == 'E') {
         printf ("END LOOP\n");
         break;
      } else if (c == 'c' || c == 'C')
         printf ("Cheese\n");
      else 
         printf ("Not Cheese\n");
   }
   return 0;
}

Сравнение не равных EOF показывает, как getchar() может завершить цикл while. В противном случае break делает, если 'e' или 'E' взяты из стандартного ввода.

Int перед main и return 0 должны сделать его чистым ANSI C, поэтому в основном стилистический, но хороший стиль.

0 голосов
/ 07 апреля 2014
#include<stdio.h>
#include<conio.h>

int x,y,z;
int large();
int main()
{
    printf("Enter the number");
    scanf("%d%d%d",&x,&y,&z);
    large();
    return 1;
}
int large()
{
    printf("large is %d\n",x);
}
{
    else if (y>x;&&y>z)
    {
    printf("%d the larger\n",y);
    }
    else
    {
    printf("%d larger is",x);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...