Existe uma função em C que faz o mesmo que Raw_input no Python?
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 .. ??
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;
}