2014-01-19 3 views
1

Я пытаюсь прочитать строку символов в C: Если я использую get, компилятор не читает мое слово, потому что он считает, что ENTER является моей строкой, я думаю. Я пробовал использоватьusing gets in c programming is wrong

scanf("%*c") 

но тогда, если я сделаю это и наберем «цветок», переменная сохранит строку «ниже». Если я использую

scanf("%s",s) 

тогда компилятор ничего не хранит после того, как я ударил пространство. Если я использую

fgets(s,20,stdin) 

У меня точно такая же проблема, как если бы я добирается. Что мне делать?

+2

'scanf ("% * c ")' ?? Отсутствует второй аргумент ... –

+2

Пожалуйста, помните, что это не компилятор, который читает ваши слова. Это ваша программа. –

+0

как вы печатаете свою строку? – thumbmunkeys

ответ

0

Вы можете использовать getchar() и ungetchar(), чтобы решить эту проблему, как это:

char c; 
while((c=getchar())<=' '); 
ungetchar(c); 

код выше будет удалить все ненужные пробелы или вводит перед строкой, то вы можете gets как вы хотите

+1

Этот код также будет использовать любой символ' char' в диапазоне 'CHAR_MIN'' '' ''. Может быть, вместо 'int c; while (isspace (c = getchar())); ' – chux

+0

Существует: tab = 9, строка и возврат каретки = 10,13 и пробел = 32, остальные - контрольные символы –

1

Просто «удалите» новую строку, если она находится в конце строки:

if (fgets(s, 20, stdin) != NULL) 
{ 
    while (strlen(s) > 0 && s[strlen(s) - 1] == '\n') 
     s[strlen(s) - 1] = '\0'; 
} 
+2

+1, но я бы' size_t len = strlen (s) 'вместо вызова' strlen() '3x. – chux

0

scanf() не читает строка после пробела. Короче говоря, он читает непрерывную строку, но fgets() определяется для чтения символов (пробел также). В моем компиляторе Dev-C++ & 64-разрядная операционная система, fgets() считывает символы, включая пробел. Запоминающее пространство также является символом, определяемым значением ASCII.