lo que era la sintaxis de las cadenas de entrada con más de una palabra es decir, con espacio entre ellos a través de scanf() no se pone()de entrada múltiple cadena de palabras a través de scanf()
Respuesta
I no creo que esto sea posible con scanf(). Si conoce el número de palabras que desea leer, se puede leer con
char str1[100], str2[100];
scanf("%s %s", str1, str2);
Tenga en cuenta que este es un gran agujero de seguridad, ya que un usuario puede entrar fácilmente en una cadena que es más largo que el espacio asignado.
Si no conoce el número de palabras, puede que tenga que reformular su pregunta. ¿Para qué lo necesitas leer? ¿Por qué no quieres usar gets(), por qué tiene que ser scanf()?
Por supuesto 'get' es su propia laguna de seguridad también, y uno debería usar' fgets' en su lugar. –
no existe una "gran laguna de seguridad" si utiliza el conocido parámetro scanf-format como "scanf ("% 99s% 99s ", str1, str2)" – user411313
Gracias Gordon, no sabía sobre el campo de ancho del formateador . Pero, ¿cómo se manejarán las palabras con> 99 caracteres? ¿Los caracteres están descartados correctamente, o permanecerán en el búfer de entrada y causarán que falle el siguiente formateador? –
Se podía leer una línea completa de un archivo si desea con:
scanf("%[^\n]\n", line);
Ahora, usted podría utilizar sscanf para obtener cada palabra:
sscanf(line, "%s", word);
line += strlen(word) + 1;
"línea" y "palabra" son punteros de char.
Observe cómo va la línea para llegar a la siguiente palabra.
'scanf ("% [^ \ n] \ n ", línea);' ** no ** siempre leerá una línea completa. No guarda nada en 'line', la entrada es' "\ n" 'y el' '\ n'' permanecerá en 'stdin'. 'sscanf (línea,"% s ", palabra);' no guardará nada en 'word' si' line' solo está compuesto por espacios en blanco. – chux
char name[50];
printf("Enter your full name: ");
scanf("%[^\n]s",name);
Aquí [^\n
indica que scanf()
mantendrá recibir caracteres en name[ ]
hasta que se encuentre una \n
.
No hay necesidad de 's' en' scanf ("% [^ \ n] s", nombre); '. – chux
Mejor usado fgets()
que scanf()
para leer una línea de entrada del usuario.
Si el código debe utilizar scanf()
continuación
char buf[100];
// Read up to 99 char and then 1 \n
int count = scanf("%99[^\n]%*1[\n]", buf);
if (count == EOF) {
Handle_EndOfFile(); // or IO error
}
if (count == 0) { // Input began with \n, so read and toss it
scanf("%*c");
}
Ahora PARSE buf
de palabras individuales.
char field1[40];
char field2[40];
char field3[40];
char field4[40];
char field5[40];
char field6[40];
/*
* sscanf(workarea, format, field of pointers)
* Interpret [^ ] as a field ending in a blank
* Interpret [^' '] as a field ending in a blank
* Interpret [^ |\t] as a field ending in blank or tab char
* Interpret [^' '|\t] as a field ending in blank or tab char
* Interpret [^ |\t\n] as a field ending in blank, tabchar or end-of-line
*
*/
strcpy(workarea,"Bread milk eggs cheese tomatoes cookies \n");
i=sscanf(workarea," %[^' '|\t] %[^[' '|\t] %[^' '|\t] %[^' '|\t] %[^' '|\t] %[^' '|\t|\n] ",
field1,field2,field3,field4,field5,field6);
Este escaneo resultados en campo1 que contienen "Pan", que contiene campo2 "leche", ... Field6 que contiene "cookies". Entre la primera y la última palabra puede incluir uno o más espacios en blanco o pestañas Las cookies de finalización siguientes pueden ser una de las tres de espacio, pestaña o línea nueva que se eliminarán y no serán parte de "cookies".
- 1. has_many múltiple: a través de
- 2. ¿Scanf() toma '\ n' como entrada sobrante del scanf anterior()?
- 3. Entrada de audio a través de HTML5?
- 4. Entrada en C. Scanf before gets. Problema
- 5. Analizando entrada con scanf en C
- 6. Línea de comando de Python - Entrada de línea múltiple
- 7. Jquery matriz entrada a través de ajax
- 8. espacio en blanco en la cadena de formato (scanf)
- 9. Convertir palabras (cadena) a Int
- 10. Entrada múltiple en JOptionPane.showInputDialog
- 11. C# coincidencia de cadena múltiple
- 12. Selectores CSS de entrada múltiple [tipo]
- 13. Factory Girl has_many múltiple a través es
- 14. Usando scanf con NSStrings
- 15. Palabras clave de bloqueo de fuente: resaltar la subexpresión múltiple
- 16. Ruby: Extraer palabras de Cadena
- 17. División de cadena en palabras
- 18. paginación múltiple con kaminari a través de Ajax
- 19. Usar palabras múltiples en la cadena de entrada de búsqueda de texto completo
- 20. Lea una cadena de Ruby de a un carácter por vez (para el ajuste de palabras)
- 21. Cómo iterar a través de una cadena
- 22. bucle de python a través del archivo de entrada
- 23. Truncar cadena a las primeras n palabras
- 24. ¿Por qué aparece Scanf para omitir la entrada?
- 25. Usando scanf para aceptar la entrada del usuario
- 26. de Split cadena en palabras alterna (Scala)
- 27. Al usar la función de entrada "scanf" en la consola de depuración de Xcode 4
- 28. Regex: cómo obtener palabras de una cadena (C#)
- 29. Romper una cadena aparte en una secuencia de palabras
- 30. ¿La entrada es invisible a través de css?
Parece más una pregunta C que C++, corrígeme si me equivoco? – DumbCoder