Pergunta

Existe uma função C que faz o mesmo que raw_input em Python?

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

Como posso escrever algo assim em c?

Atualizar::

Eu faço isso, mas recebo um erro ::

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

E o erro é que o programa execute e imprima a msg e pegue o tipo de usuário por scanf, mas depois pendura e sai .. ??

Foi útil?

Solução

Você pode escrever um com bastante facilidade, mas você deve ter cuidado com os transbordamentos de buffer:

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

Em seguida, use assim:

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

Você pode querer adicionar alguma verificação de erros e assim por diante.

Outras dicas

o Posix.1-2008 padrão especifica a função Obter linha, que alocará a memória dinamicamente (re) para abrir espaço para uma linha de comprimento arbitrário.

Isso tem o benefício sobre gets de ser invulnerável para transbordar um buffer fixo e o benefício fgets de ser capaz de lidar com linhas de qualquer comprimento, às custas de ser um DOS em potencial se o comprimento da linha for maior que o espaço disponível.

Antes do suporte do POSIX 2008, o Glibc também expôs isso como uma extensão GNU.

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

Lembrar de free(line) Depois que você terminou.


Para ler em um buffer de tamanho fixo, use fgets ou scanf("%*c") ou similar; Isso permite que você especifique um número máximo de caracteres para digitalizar, para evitar transbordar um buffer fixo. (Não há razão para usar gets, é inseguro!)

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

Usar printf Para imprimir seu prompt, depois use fgets para ler a resposta.

A resposta selecionada me parece complexa.

Eu acho que isso é um pouco mais fácil:

#include "stdio.h"

int main()
{
   char array[100];

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

   return 0;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top