Created
July 30, 2011 18:44
-
-
Save ravishi/1115844 to your computer and use it in GitHub Desktop.
lê a entrada padrão até encontrar um newline
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Versões: | |
* ... um bocado de versões bugadas ou incompletas | |
* 1. uma versão "funcional" | |
* 2. removidas as chamadas a fflush(stdin), que eram inúteis, como é explicado dado aqui [1] | |
* | |
* [1] http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351 | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
/* lê coisas da entrada padrão até encontrar um newline. | |
* retorna a string lida (sem o newline no final) em caso de sucesso | |
* ou NULL caso algum erro aconteça. o tamanho inicial do buffer será ignorado | |
* se for menor que 1 */ | |
char * input(int initial_buf_size) | |
{ | |
char c, *cur, *buffer; | |
int current_buf_size; | |
if (initial_buf_size < 1) { | |
initial_buf_size = 1; | |
} | |
cur = buffer = malloc(sizeof(char) * initial_buf_size); | |
current_buf_size = initial_buf_size; | |
while (buffer != NULL) { | |
/* ler o próximo caractere */ | |
*cur = fgetc(stdin); | |
if (ferror(stdin)) { | |
/* erro */ | |
free(buffer); | |
return NULL; | |
} else if (*cur == '\n' || *cur == '\0' || *cur == EOF) { | |
/* fim da linha encontrado */ | |
*cur = '\0'; | |
return buffer; | |
} | |
/* garantir que há espaço suficiente no buffer para mais um caractere | |
*/ | |
if (current_buf_size < cur - buffer + 1) { | |
current_buf_size *= 2; | |
buffer = realloc(buffer, sizeof(char) * current_buf_size); | |
} | |
/* continuar lendo... */ | |
cur++; | |
} | |
return NULL; | |
} | |
void main() | |
{ | |
while (1) { | |
char *str; | |
printf("Escreva alguma coisa:\n"); | |
str = input(1); | |
if (str == NULL) { | |
printf("Erro\n"); | |
} else if (strcmp(str, "") != 0) { | |
printf("Você escreveu: %s\n", str); | |
} else { | |
printf("\n\nFalou!\n"); | |
break; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment