Два слова в строке из текстового файла

Я пытаюсь получить два слова в строке, и я не знаю, как это сделать. Я попытался, но если в текстовом файле у меня есть имя Penny Marie, это дает мне: имя Пенни. Как я могу получить Пенни Мари в s1? Спасибо

#include  #include  int main() { printf("Hello world!\n"); char s[50]; char s1[20]; FILE* fp = fopen("file.txt", "rt"); if (fp == NULL) return 0; fscanf(fp,"%s %s",s,s1); { printf("%s\n",s); printf("%s",s1); } fclose(fp); return 0; } 

Измените формат fscanf, просто скажите, чтобы он не прекратил чтение до новой строки:

fscanf(fp,"%s %[^\n]s",s,s1);

Вы должны использовать fgets .

Или вы можете попытаться сделать это:

 fscanf(fp,"%s %s %s", s0, s, s1); { printf("%s\n",s); printf("%s",s1); } 1 fscanf(fp,"%s %s %s", s0, s, s1); { printf("%s\n",s); printf("%s",s1); } 

и объявить s0 как пустоту *

Другой отвечает на корректировку адреса для вашего вызова fscanf характерного для вашей заявленной необходимости. (Хотя fscanf() обычно не лучший способ сделать то, что вы просите.) Ваш вопрос касается получения двух слов, Penny & Marie , из строки в файле, который содержит: name Penny Marie . И как задано в комментариях, что, если файл содержит более одной строки, которая должна быть проанализирована, или строки имен содержат переменное число имен. Как правило, следующие функции и методы более подходят и чаще используются для чтения содержимого из файла и анализа его содержимого в строки:

fopen () и его аргументы.
fgets ()
strtok () (или strtok_r () )
Как определить количество строк в файле (полезно для создания массива строк)
Как читать строки файла в массив строк .

Развертывание этих методов и функций может быть адаптировано во многом для анализа содержимого из файлов. Чтобы проиллюстрировать, ниже приводится небольшой пример использования этих методов, который будет обрабатывать ваши заявленные потребности, включая несколько строк на файл и переменные числа имен в каждой строке.

Данный файл: names.txt в локальном каталоге:

 name Penny Marie name Jerry Smith name Anthony James name William Begoin name Billy Jay Smith name Jill Garner name Cyndi Elm name Bill Jones name Ella Fitz Bella Jay name Jerry 

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

 int main(void) { // get count of lines in file: int longest=0, i; int count = count_of_lines(".\\names.txt", &longest); // create array of strings with information from above char names[count][longest+2]; // +2 - newline and NULL char temp[longest+2]; char *tok; FILE *fp = fopen(".\\names.txt", "r"); if(fp) { for(i=0;i 

Измените строку fscanf на fscanf(fp, "%s %s %s", s, s1, s2) .

Затем вы можете printf свои переменные s1 и s2 чтобы получить «Пенни» и «Мари».

Попробуйте функцию fgets

  fp = fopen("file.txt" , "r"); if(fp == NULL) { perror("Error opening file"); return(-1); } if( fgets (str, 60, fp)!=NULL ) { /* writing content to stdout */ puts(str); } fclose(fp); 

В приведенном выше fragmentе кода будет выписываться содержимое с максимальным количеством символов 60 символов. Вы можете сделать эту динамическую часть с помощью str(len) если я не ошибаюсь.