2016-12-06 4 views
0

Я хочу ввести символ и сохранить его в массиве StringTemp[5][50]. он остановит входной символ, если я нажму кнопку ввода. но он не работаетВведите символы с getche и сохраните их в массиве

char StringTemp[5][50]; 
char c; 
int i,o; 
i = 1; 
o = 1; 

c = getche(); 
while (c != EOF && c != '\n') { 
    if (c == ' ') { 
     i++; 
     o = 1; 
    } 
    else { 
     StringTemp[i][o] = c; 
     o++; 
    } 
    c = getche(); 
} 

любое предложение?

+2

1) 'i = 1; o = 1; '->' i = 0; o = 0; 'начинать с' 0'. 2) 'char c;' -> 'int c;' 3) Строка C должна заканчиваться 0. – BLUEPIXY

+1

Вероятно, вы должны использовать 'int c;', чтобы избежать неправильного обращения ÿ. Вы также должны предотвратить переполнение буфера. –

+0

Почему используется 'int' для хранения символа? –

ответ

1
  1. Есть варианты в зависимости от клавиатуры и stdin, но getche() получает ключ без эха. Когда пользователь вводит Enter, символ un C-ified может быть «\ n» или «\ r». Когда это будет напечатано, вы получите соответствующую линию или возврат каретки. Так как Enter отображает на «\ r» на вашей клавиатуре, то при получении с помощью getche() протестируйте его и напечатайте '\ n'. При извлечении через getchar() C переводит Enter в '\ n'.

    int ch = getche();

    if (ch == '\ r') c = '\ n';

    printf ("% c", ch);

  2. Используйте int c, чтобы код мог проверить EOF.

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