2016-01-06 2 views
0

Программа 100 должна разделить строку, когда он находит! или? или. Строка должна содержать \ п строку и! или? или. где она присутствует. Пример файла test.txtРазбивает строка из текстового файла

Lorem Ipsum моркови, усиленные скидок, но они делают occaecat раза, жизнеспособности, такие как труд и ожирение. За последующие годы, усилия, если школьный округ, который имеет nostrud aliquip из нее преимущество упражнений и долговечности. Загрузить информацию как визитная карточка Е, который мы делает упражнение любых из тела получает утомительной, за исключением того, чтобы получить некоторое преимущество от него Но кто имеет какие-либо права придраться с теми, кто будет приятно, что не имеет раздражающих последствия, или тот, кто избегает боли, что удовольствие, нет комментариев?

мой код читателя до первого маркера, где 1 ошибаюсь?

int main(){ 
    FILE *file; 
    char stringa[MAXCHAR]; 

    file = fopen ("prova.txt", "r"); 
    if (file == NULL){ 
     perror("errore nell'apertura del file"); 
     return (1); 
    } 
    while (fscanf(file, "%[^!?.]", stringa) != EOF) { 
     printf("Data from file:\n%s", stringa); 
     //break; 
    } 
    fclose(file); 

    return 0; 
} 

мой выход:

Lorem Ipsum морковь, увеличенные скидки, но они делают occaecat время жизнеспособность, такие как труд и ожирение

Спасибо за вашу помощь ...

+0

перерыв statemen тт вставлял случайно – Francesco

ответ

0

читателя кода до первых маркеров найдены, но он ставит обратно лексемы, так что даже без «перерыва» ваша программа не будет читать дальше, он войдет в бесконечный цикл, в то время, потому что ваше состояние не так хорошо определен, он должен быть:

while (fscanf(file, "%[^!?.]", stringa) == 1) //checks if text was read successfully 

Кроме того, необходимо, чтобы избавиться от каких-либо маркеров, когда встречаются, то это должно сделать это:

while (fscanf(file, "%[^!?.]", stringa) == 1) { 
     printf("Data from file: %s\n", stringa); 
     fscanf(file,"%*[!?.]"); 
    } 
1
Это

выход, потому что вы использовали break как только вы заметили . или !? для ввода. 1
считает, что вы хотите, чтобы заменить любого из этих трех символов во входном потоке по \n.
Если это так, то замените break на printf("\n")

+1

-не будет идти так далеко, чтобы предложить замену 'перерыва«with' Е („\ п“); 'как это на самом деле не предполагает, что требуется, но удаление of' разрыва» является пятно на избежание преждевременного прекращения цикла. – mah

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