Pregunta

¿Hay una función C que hace lo mismo que raw_input en Python?

#in Python::
x = raw_input("Message Here:")

¿Cómo puedo escribir algo así como que en C?

Actualizar ::

hago esto, pero me sale un error ::

#include<stdio.h>
#include<string.h>
#include "stdlib.h"

typedef char * string;

int raw_input(string msg);
string s;
string *d;

main(){
raw_input("Hello, Enter Your Name: ");
d = &s;
printf("Your Name Is: %s", s);

}

int raw_input(string msg){
string name;
printf("%s", msg);
scanf("%s", &name);
*d = name;
return 0;
}

y el error es que la ejecución del programa e imprimir el msg, y tomar qué tipo de usuario mediante scanf, pero luego se cuelga y salida .. ??

¿Fue útil?

Solución

Puede escribir uno con bastante facilidad, pero usted querrá tener cuidado con desbordamientos de búfer:

void raw_input(char *prompt, char *buffer, size_t length)
{
    printf("%s", prompt);
    fflush(stdout);
    fgets(buffer, length, stdin)
}

A continuación, utilizar de esta manera:

char x[MAX_INPUT_LENGTH];
raw_input("Message Here:", x, sizeof x);

Es posible que desee añadir un poco de comprobación de errores, y así sucesivamente.

Otros consejos

El POSIX.1-2008 previsto por la norma de la función getline , que dinámicamente se (re) asignar memoria para liberar espacio para una línea de longitud arbitraria.

Esto tiene la ventaja sobre gets de ser invulnerable a rebosar un tampón fija, y el beneficio sobre fgets de ser capaz de manejar líneas de cualquier longitud, a expensas de ser un potencial DoS si la longitud de línea es más largo que el montón disponibles espacio.

Antes de 2008 POSIX apoyo, Glibc expuesto esto como una extensión de GNU también.

char *input(const char *prompt, size_t *len) {
    char *line = NULL;
    if (prompt) {
        fputs(prompt, stdout);
        fflush(stdout);
    }
    getline(&line, len, stdin);
    return line;
}

Recuerde que free(line) después de que haya terminado con él.


Para leer en una memoria intermedia de tamaño fijo, el uso fgets o scanf("%*c") o similares; esto le permite especificar un número máximo de caracteres para escanear, para evitar que desborde un búfer fijo. (No hay razón para uso cada vez gets, no es seguro!)

char line[1024] = "";
scanf("%1023s", line);      /* scan until whitespace or no more space */
scanf("%1023[^\n]", line);  /* scan until newline or no more space */
fgets(line, 1024, stdin);   /* scan including newline or no more space */

Uso printf para imprimir su sistema, a continuación, utilizar fgets para leer la respuesta.

La respuesta seleccionada parece complejo para mí.

Creo que esto es poco más fácil:

#include "stdio.h"

int main()
{
   char array[100];

   printf("Type here: ");
   gets(array);
   printf("You said: %s\n", array);

   return 0;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top