Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ строки, С

Автор: Tan 22.11.2007 3:33

Всем привет - я хочу следующее : Вводится символ, если это 3, 4, 5 - то выводим на экран, если нет, то не выводим. Если после того как нажали 3, нажали 4 или 5 то меняем значение на нововведённое (аналогично со всеми). Что - то кажется мне, что я с символом окончания строки что - то напортачил. Буду рад, если подкорректируете кусочек кода.

	
int len;
char number[2];
len = 0;
if ( ( ch = getch() ) != 0 )
switch ( ch )
{
case 51,52,53 : //3, 4, 5
{
if ( len != 1 )
{
len++;
number[1] = ch;
}

else {
len--;
number[1] = ch;
}
}
break;

default : break;
}
bar (600,100,620,110);
outtextxy (600, 100, number);
} while (ch != 13);
number[2] = '\0';
amount = atoi (number);

Автор: volvo 22.11.2007 3:49

case 51,52,53 : //3, 4, 5
blink.gif Ты думаешь, это - вариант для 3-х символов? Сомневаюсь... Есть в С такая операция - "запятая". Она возвращает только последний результат, так что приведенный выше фрагмент аналогичен:

case 53 :


Чтобы сделать то, что ты задумал -
case 51:
case 52:
case 53: // 3, 4, 5
, тогда в этой метке будут обрабатываться все 3 символа...

Автор: Tan 22.11.2007 3:56

Спасибо, это учту на будущее, это всё эхо паскаля smile.gif А в остальном что не так ?

Автор: volvo 22.11.2007 4:02

Лишние переменные и строки кода... В частности, len вообще не нужна, весь фрагмент:

...
int amount, ch;

/* инициализировать number достаточно так */
char number[2] = " \0";

do {
if((ch = getch()) != 0 )
switch(ch) {
case 51: case 52: case 53 :
number[0] = ch;
break;
}
bar (600,100,620,110);
outtextxy (600, 100, number);
} while (ch != 13);

amount = atoi (number);
...

Автор: Tan 22.11.2007 4:07

Действительно, надо по максимуму брать от языка, спасибо!