2016-10-09 4 views
0

Я должен ввести символы с пробелами между ними. Например, +/8 7 - 9 '\ n' (когда я нажимаю Enter) Затем я пишу их в массиве символов и в нем есть что-то вроде этого:. +/89-9Чтение символов с помощью scanf ("% c, &ch);

Как я могу пропустить эти белые пространства

Я пытался написать что-то, но он не работает:

char *arr = new char[1000]; 
char ch; 
scanf("%c", &ch); 
int i = 0; 
arr[0] = ch; 
cout << arr[0]; 
while (ch != '\n') 
{ 
    //scanf("%c", &ch); 
    scanf("%*[ ]%c", &ch); 
    cout << (arr[i++] = ch); 

} 

arr[i++] = '\n'; 
+2

Смешивание C и C++ является, нет, нет, использовать одну функции или другой. – t0mm13b

+2

В самой первой итерации цикла переменная 'i' остается равной нулю до * после *, вы делаете' arr [i ++] = ch'. Это означает, что вы перезаписываете первый символ, который вы читаете перед циклом. –

+0

Мой код переходит в бесконечный цикл, и я не могу его исправить, даже я делаю переменные изменения, как вы сказали. – fghjkl4083

ответ

0

Вы были довольно близки

scanf(" %c", &ch); 

От docs:

пробельные символы: любой одиночный символ пробела в строке формата потребляет все доступные последовательные символы пробела из входного (определяется как при вызове isspace в цикле). Обратите внимание, что нет разницы между "\n", " ", "\t\t" или другими пробелами в строке формата.

, если вы хотите, чтобы пропустить другие, чем \n пробельные символы и продолжайте читать один-один (требуется #include <cctype>):

while (ch != '\n') { 
    scanf("%c", &ch); 
    if(!isspace(ch)) { 
     cout << (arr[i++] = ch); 
    } 
} 
+0

Мой код переходит в бесконечный цикл, и я не могу его исправить – fghjkl4083

+0

@ fghjkl4083 Это потому, что 'scanf ("% c ", & ch)' никогда не будет читать '' \ n'' в 'ch', так как вы сказали ему пропусти это. – krzaq

+0

Как это изменить? Понятия не имею. – fghjkl4083

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