Question

Y at-il une fonction C qui fait la même chose que raw_input en Python?

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

Comment puis-je écrire quelque chose comme ça dans C?

Mise à jour ::

Je fais, mais je reçois une erreur ::

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

et l'erreur est que l'exécution du programme et imprimer le msg et prendre quel type utilisateur par scanf, mais il se bloque et la sortie .. ??

Était-ce utile?

La solution

Vous pouvez écrire un assez facilement, mais vous aurez envie de faire attention à dépassement de tampon:

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

Utilisez ensuite comme ceci:

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

Vous pouvez ajouter une vérification des erreurs, et ainsi de suite.

Autres conseils

Le POSIX.1-2008 norme spécifie la fonction getline , qui sera dynamiquement (re) allouer de la mémoire pour faire place à une ligne de longueur arbitraire.

Ceci a l'avantage sur gets d'être invulnérable à déborder un tampon fixe, et l'avantage sur fgets d'être en mesure de gérer les lignes de toute longueur, au détriment d'être un DoS potentiel si la longueur de la ligne est plus longue que tas disponible l'espace.

Avant 2008 soutien POSIX, glibc exposé cela comme une extension GNU ainsi.

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

Rappelez-vous free(line) une fois que vous avez terminé avec.


Pour lire dans une mémoire tampon de taille fixe, utiliser fgets ou scanf("%*c") ou similaire; Cela vous permet de spécifier un nombre maximal de caractères à analyser, pour éviter débordement d'un tampon fixe. (Il n'y a aucune raison d'utiliser jamais gets, il est dangereux!)

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 */

Utilisez printf pour imprimer votre message, utilisez fgets lire la réponse.

La réponse choisie me semble complexe.

Je pense que cela est plus facile:

#include "stdio.h"

int main()
{
   char array[100];

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

   return 0;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top