2012-04-29 3 views
1

У меня есть следующий простой код для класса, и я получаю ошибку синтаксического анализа для каждой строки, начиная с c = c ... в операторах if. Кроме того, я получаю следующие ошибки:Ошибка анализа: простая программа C

Предупреждение: введите несоответствие с предыдущим неявным объявлением. Предыдущее неявное объявление isUpperCase в функции isUpperCase: проанализировать ошибку перед токеном '='. И аналогичная ошибка для isLowerCase.

У кого-нибудь есть понимание?

#include<stdio.h> 
#include<string.h> 

#define LOWERCASE_START = 97 
#define LOWERCASE_END = 122 
#define UPPERCASE_START = 65 
#define UPPERCASE_END = 90 
#define ALPHABET_LENGTH = 26 

void simpleEncryption(char s[]){ 
    int i; 
    for (i=0; i < strlen(s); i++){ 
     char c = s[i]; 
     if (isUpperCase(c) == 1){ 
      c = c - UPPERCASE_START + 1; 
      c = c % ALPHABET_LENGTH; 
      c = c + UPPERCASE_START; 
     } else if (isLowerCase(c) == 1){ 
      c = c - LOWERCASE_START + 1; 
      c = c % ALPHABET_LENGTH; 
      c = c + LOWERCASE_START; 
     } 
     s[i]=c; 
    } 
} 

int isUpperCase(char c) { 
    if (c >= UPPERCASE_START && c <= UPPERCASE_END) { 
     return 1; 
    } else { 
     return 0; 
    } 
} 

int isLowerCase(char c) { 
    if (c >= LOWERCASE_START && c <= LOWERCASE_END) { 
     return 1; 
    } else { 
     return 0; 
    } 
} 
+0

был изменен, чтобы удалить точку с запятой, отмеченную Oli – canton

ответ

8

Ваши макроопределения не должны содержать знак равенства, вы просто хотите:

#define LOWERCASE_START 97 
#define LOWERCASE_END 122 
#define UPPERCASE_START 65 
#define UPPERCASE_END 90 
#define ALPHABET_LENGTH 26 

Препроцессор довольно наивным и слепо заменить = 97 в вашем C, чтобы произвести сломанные вещи, как это:

c = c - = 97 + 1; 

, если у вас есть = в вашем #define с.

+0

Ты, мой друг, спасатель! Большое спасибо! – canton

6

isUpperCase() и isLowerCase() не объявлены до их использования: либо добавить объявление для каждого, или переместить их определений перед simpleEncryption().

Как указано выше mu is too short, макроопределения неверны. Либо исправить макросы или использовать const int переменные вместо:

static const int ALPHABET_LENGTH = 26; 
+0

Спасибо, что избавился от ошибок несоответствия типа, у меня все еще есть ошибки разбора! – canton

Смежные вопросы