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, но он тоже не работал. Почему?

★★★★

Re: switch()

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

knoppix ()
Ответ на: Re: switch() от Selecter

Re: switch()

>ch='c'

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

Cooler ★★★★ ()
Ответ на: Re: switch() от knoppix

Re: switch()

В gcc, разумеется, тоже будет работать

Selecter ★★★★ ()
Ответ на: Re: switch() от Cooler

Re: switch()

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

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 ★★★★ ()
Ответ на: Re: switch() от Cooler

Re: switch()

>field.cxx:62: error: switch quantity not an integer

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

SatanClaus ★★★ ()
Ответ на: Re: switch() от SatanClaus

Re: switch()

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

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

Cooler ★★★★ ()
Ответ на: Re: switch() от Selecter

Re: switch()

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

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

Legioner ★★★★★ ()
Ответ на: Re: switch() от Selecter

Re: switch()

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

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

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

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

aton ()
Ответ на: Re: switch() от aton

Re: switch()

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

объект? в си?

anonymous ()
Ответ на: Re: switch() от aton

Re: switch()

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

anonymous ()
Ответ на: Re: switch() от anonymous

Re: switch()

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

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

:)

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