Dos palabras en una cadena de archivo de texto

Estoy tratando de poner dos palabras en una cadena y no sé cómo puedo hacerlo. Lo intenté pero si en un archivo de texto tengo ‘nombre Penny Marie’ me da: nombre Penny. ¿Cómo puedo obtener Penny Marie en s1? Gracias

#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; } 

Cambie el formato fscanf, solo dígale que no deje de leer hasta que aparezca una nueva línea:

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

Debes usar fgets .

O puedes intentar hacer esto:

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

y declara s0 como nulo *

Las otras respuestas abordan los ajustes a su llamada fscanf específicos a su necesidad declarada. (Aunque fscanf() generalmente no es la mejor manera de hacer lo que está preguntando). Su pregunta es específica sobre cómo obtener 2 palabras, Penny y Marie , de una línea en un archivo que contiene: name Penny Marie . Y como se pregunta en los comentarios, qué sucede si el archivo contiene más de 1 línea que necesita ser analizada, o si las cadenas de nombre contienen un número variable de nombres. En general, las siguientes funciones y técnicas son más adecuadas y se usan más comúnmente para leer contenido de un archivo y analizar su contenido en cadenas:

fopen () y sus argumentos.
fgets ()
strtok () (o strtok_r () )
Cómo determinar el recuento de líneas en un archivo (útil para crear una matriz de cadenas)
Cómo leer líneas de archivo en una matriz de cadenas .

La implementación de estas técnicas y funciones se puede adaptar de muchas maneras para analizar el contenido de los archivos. Para ilustrar, un pequeño ejemplo que utiliza estas técnicas se implementa a continuación que manejará sus necesidades declaradas, incluidas varias líneas por archivo y números variables de nombres en cada línea.

Archivo dado: names.txt en el directorio local:

 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 

Lo siguiente lee un archivo para caracterizar su contenido en términos de número de líneas, y la línea más larga, crea una matriz de cadenas y luego completa cada cadena en la matriz con nombres en el archivo, independientemente de la cantidad de partes del nombre.

 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 

Cambie su línea fscanf a fscanf(fp, "%s %s %s", s, s1, s2) .

Luego puedes printf tus variables s1 y s2 para obtener “Penny” y “Marie”.

Prueba la función 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); 

En el fragmento de código anterior se escribirá el contenido con un máximo de 60 caracteres. Puedes hacer que esa parte sea dinámica con str(len) si no me equivoco.