2010-05-25 3 views
0

Я продолжаю получать эту ошибку в своем проекте, и я не могу понять это! пожалуйста помоги!ошибка C2143: синтаксическая ошибка: отсутствует ')' до 'константа

ошибка C2143: синтаксическая ошибка: отсутствует «)» перед «константа»

линия:

while (selection == ('a','b','c', 'd', 'e', 'f', 'g', 'h', 'i','A','B' 'C', 'D', 'E', 'F', 'G', 'H', 'I'); 

также я знаю, что есть более простой способ, чтобы написать эту строку из, но им не уверен, как я могу это сделать. im новичок в этом, так что любой из вас может изменить эту строку для меня!

+0

Вы могли бы расширить код немного для вашего второго запроса написать это лучше - что такое выбор? Также отформатируйте код в блоке кода. –

+0

Все ответы до сих пор предполагают «выбор символов», каков остальной блок кода? –

ответ

6

Сколько открытых круглых скобок у вас есть?

Сколько закрытых круглых скобок у вас есть?

Эти же цифры? Если нет, то где один отсутствует?

Кроме того, синтаксис a == (b,c,d) не является сокращением для a == b || a == c || a == d, как будто вы, кажется, думаете. Это фактически эквивалентно a == d из-за того, как работает comma operator.

Чтобы быть полностью явным, что вы на самом деле хотите это:

while (selection == 'a' || selection == 'b' || 
     selection == 'c' || selection == 'd' || 
     selection == 'e' || selection == 'f' || 
     selection == 'g' || selection == 'h' || 
     selection == 'i' || selection == 'A' || 
     selection == 'B' || selection == 'C' || 
     selection == 'D' || selection == 'E' || 
     selection == 'F' || selection == 'G' || 
     selection == 'H' || selection == 'I') 
{ 
    /* Do stuff */ 
} 

Или, чтобы быть намного больше consice об этом, вы можете воспользоваться тем, что буквы расположены в алфавитном порядке ASCII стол, и писать

while (tolower(selection) >= 'a' && tolower(selection) <= 'i') 
{ 
    /* Do stuff */ 
} 

Это требует включения <ctype.h> для функции tolower.

+1

В дополнение к этому, OP действительно не хочет сравнивать «выбор» с результатом оператора запятой. – nos

+0

хорошо, когда я добавить закрытые скобки это дает мне это вместе с исходной ошибкой: \ ошибка C2059: синтаксическая ошибка: «)» это то, что линия выглядит, когда я добавить закрытые скобки: \t while (выбор == ('a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'A', 'B' ' C ',' D ',' E ',' F ',' G ',' H ',' I ')); – user350217

+1

дальнейший намек - в то время как определение цикла обычно не заканчивается символом a; если вы не хотите, чтобы он что-либо делал –

1

Учитывая ваши комментарии по почте Тайлера, кажется, что вы действительно хотите:

while ((selection >= 'a' && selection <= 'i') || (selection >= 'A' && selection <= 'I')) 
{ 
    // loop 
} 

символы можно сравнить, как если бы они были номера (потому что они являются номера в CPU), что означает, что вы можете проверить диапазон символов с помощью операторов < > <= >=.

+0

YES !! Спасибо Спасибо спасибо!!! – user350217

+0

Просто помните, что, хотя это работает на ПК, оно может разрываться (например) на мэйнфреймах IBM. Они используют EBCDIC вместо ASCII, и у EBCDIC есть некоторые неалфавитные символы между некоторыми буквами - что-то вроде половины доз между «i» и «j» и одинаковое число между «r» и «s». Аналогично с прописными буквами. [Предупреждение: моя память о точном письме может быть немного выключена]. –

+1

или сделать это, например. : 'while (strchr (" abcdefghiABCDEFGHI ", выбор)! = NULL) {...}' – nos

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