LINUX.ORG.RU

switch()


0

0

Как мне сделать так чтобы switch проверял строковую переменную?
Я например присваиваю ch = "c";
а компилятор ругается:
main.c: In function `main':
main.c:5: warning: assignment makes integer from pointer without a cast

код такой

#include <stdio.h>

main(){
char ch = 0;
ch = "c";
switch (ch){
case 'i':
puts("А");
break;
case 'c':
puts("В");
break;
default:
puts("AAAA!");
break;
}
}

если убрать ch ="c"; то всё работает. Я пробовал похожий пример из руководсва по cpp, но он тоже не работал. Почему?

★★★★

А если вместо ch = "c"; вставить ch = 'c'; то вроде как все и работает, правда тока в MSVC 6 , в gcc не смотрел :(, т.к нету на работе Linux'a.

knoppix
()
Ответ на: комментарий от Selecter

>ch='c'

Спасибо большое! Я правда так уже пробовал, но у меня был масив, наверное из-за него не работало...

Cooler ★★★★
() автор топика
Ответ на: комментарий от Cooler

Теперь у меня другая проблема.

char sptype[20];
//..
sscanf(buffer, "%d,%d,%s", &xnum, &ynum, sptype);
а потом идёт switch(sptype)

компилер говорит:
field.cxx: In function `int main(int, char**)':
field.cxx:62: error: switch quantity not an integer
field.cxx:63:22: warning: character constant too long for its type

Cooler ★★★★
() автор топика
Ответ на: комментарий от SatanClaus

>Там же написано что в switch надо integer поставить, а не *char как тут.

Я понял, но мне нужно подставить именно строковую переменную, как в начале темы.

Cooler ★★★★
() автор топика
Ответ на: комментарий от Selecter

> switch...case только int умеет

Точнее integer type, т.е. целый тип

Legioner ★★★★★
()
Ответ на: комментарий от Selecter

Глупости все это...

Условием для switch может быть:

1. Интегральный тип
2. Перечисляемый тип
3. И даже объект, который можно привести к 1 или 2

Интегральный тип - это не только int

aton
()
Ответ на: комментарий от aton

Как бы не хотелось сравнивать строки в switch(), это невозможно. Или используй if-else if-else, или другой язык программирования.

anonymous
()
Ответ на: комментарий от anonymous

int hash(const char *szstr, int ilen)
{
int ihash;
...
return ihash;
}

switch(hash(szmystr))
{
...
}

:)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.