2013-01-24 20 views
2

Написание программы для класса, ограниченного только методом scanf. Получаемая программа может принимать любое количество строк в качестве входных данных. Проблема с получением ввода нескольких строк с помощью scanf.Чтение нескольких строк ввода с помощью scanf

#include <stdio.h> 
int main(){ 
    char s[100]; 
    while(scanf("%[^\n]",s)==1){ 
     printf("%s",s); 
    } 
    return 0; 
} 

Пример ввода:

Here is a line. 
Here is another line. 

Это выходной ток:

Here is a line. 

Я хочу, чтобы мой выход будет идентичен моему входу. Использование scanf.

+0

Возможный дубликат [Считывание нескольких строк ввода с помощью scanf()] (http://stackoverflow.com/questions/13592875/reading-multiple-lines-of-input-with-scanf) – user2284570

ответ

3

попробуйте этот код и используйте клавиши табуляции в качестве разделителя

#include <stdio.h> 
int main(){ 
    char s[100]; 
    scanf("%[^\t]",s); 
    printf("%s",s); 

    return 0; 
} 
+0

Я пробовал это раньше. Броски «Ловушка прерывания: 6». – John

+0

Можете ли вы рассказать мне, какое значение вы используете в качестве ввода –

+0

Я думаю, что это из-за проблемы с памятью, поскольку C не является безопасным для памяти языком. –

1

Я дам вам подсказку.

Вам нужно повторить операцию scanf до тех пор, пока не будет достигнуто условие «EOF».

Путь, который обычно делается это с помощью конструкции

while (!feof(stdin)) { 
} 

.

+1

-1: ' в то время как (! feof (..)) 'почти всегда ошибается и всегда ошибается в последней строке, если вы не придете к героическим усилиям по его обработке. –

7

Я думаю, что вы хотите что-то вроде этого (если вы действительно ограничены только зсапЕ):

#include <stdio.h> 
int main(){ 
    char s[100]; 
    while(scanf("%[^\n]%*c",s)==1){ 
     printf("%s\n",s); 
    } 
    return 0; 
} 

% * в основном собирается подавить последний символ ввода.

От man scanf

An optional '*' assignment-suppression character: 
scanf() reads input as directed by the conversion specification, 
but discards the input. No corresponding pointer argument is 
required, and this specification is not included in the count of 
successful assignments returned by scanf(). 

[Edit: убрана в заблуждение ответ, как на Криса Додда колотить :)]

+0

+1 для правильного первого ответа, -1 для совершенно неправильного и вводящего в заблуждение второго ответа. Почему люди продолжают отзывать 'while (! Feof)'? Индикатор уверенного огня, который программист не знает, что он делает. –

+0

Как устранить лишнюю строку (\ n) на последней строке вывода? – John

+0

В противном случае это так здорово, спасибо! – John

0

Попробуйте этот кусок кода. Он работает по желанию в компиляторе GCC со стандартами C99.

#include<stdio.h> 
int main() 
{ 
int s[100]; 
printf("Enter multiple line strings\n"); 
scanf("%[^\r]s",s); 
printf("Enterd String is\n"); 
printf("%s\n",s); 
return 0; 
} 
Смежные вопросы