2016-09-15 2 views
0

Я хочу создать пустую строку с фиксированной длиной, скажем 100, а затем ввести пользовательский ввод для этой строки. По какой-то причине, когда я пытаюсь отсканировать строку, код не показывает мне все ведущие пустые пространства после ввода пользователем. Если моя пустая строка имеет длину 20 и ввод 5 символов, тогда счетчик должен быть 20. Я пропустил что-то очень простое здесь, или компилятор усекает пустые пространства, несмотря ни на что?Строка с пустыми местами в C усекается

int main() 
{ 
int count=0; 
    char word[20]; 
    printf("Please enter a sting: "); 
    scanf("%s", word); 

    while (word[count]!= '\0') 
     { 
     printf ("%c",word[count]) ; 
     count++; 
     } 
    printf ("\nCharacter count :%i\n", count); 

} 

Выход:

Please enter a sting: Words 
Words 
Character count :5 

Press any key to continue. 
+2

Почему счетчик должен быть '20', если вход 5-долго, опять? 'scanf' прервет введенные 5 символов с помощью' \ 0', а не пробелов. –

+4

'scanf ("% s ", word);' пропускает ведущие пробелы и останавливается в следующих пробелах. Время, чтобы прочитать страницу руководства? Это не компилятор, это поведение кода во время выполнения. Определенная длина строки - это только * доступное * пространство, которое будет переполнено, если вы введете что-нибудь дольше. –

+0

@EugeneSh. Becuase Я объявил, что строка имеет длину 20, а входной - 5, поэтому должно быть всего 20. – Fenomatik

ответ

1

Обычно scanf("%s", word); читает, но не сохраняет ведущие пробельные и затем сохраняет без пробельных символов в word. Затем он добавляет нулевой символ и возвращается.

Для считывания строки пользовательского ввода, включая пробел, используйте fgets(). Обычно это включает . Введите или '\n'.

char word[20]; // Or maybe 100 
if (fgets(word, sizeof word, stdin)) { 

    while (word[count]!= '\0') { 
    printf("%c", word[count]); 
    count++; 
    } 
    printf ("\nCharacter count :%i\n", count); 
} 

Если моя пустая строка имеет длину 20 и вход 5 символов, то счетчик должен быть 20.

Отсчет будет отражать количество введенных символов до 20 - 1 или 19.

+1

Обратите внимание, что массив размером 20 может надежно удерживать 19 символов плюс нулевой ограничитель. Счет не должен доходить до 20. –

+0

@ Джонатан Леффлер. Если это не было 20 напитков - тогда кто знает? – chux

+0

После 20 напитков все возможно - но гниль печени кажется высокой в ​​списке правдоподобия, предполагая, что они алкогольные. В противном случае вам, вероятно, нужно будет совершить множество посещений небольшой комнаты. –

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