jOrGe.mRNh Posted December 29, 2012 at 06:44 PM Report #488944 Posted December 29, 2012 at 06:44 PM (edited) Boas, Preciso de ajuda nesta pequena parte de código. Isto trata-se de uma funçao para alterar uns dados já introduzidos no programa e eu quero que no caso de alguém não quiser alterar um certo campo, este salte esse campo quando o ENTER é premido. printf("dado actual: %s",x); printf("Insira o novo dado: "); if(getchar()=='\n') gets(x); Isto funciona, o problema é que quando alguem quer alterar este campo, imaginamos que escreve "ana", a string so recebe "na" pois o primeiro carácter fica no getchar, certo? Há alguma forma simples de ultrapassar este problema? Não me estou a lembrar de nenhuma e precisava de ajuda, Cumps Edited December 29, 2012 at 07:12 PM by pmg Falta LP; substituir backspace por ENTER
pmg Posted December 29, 2012 at 07:15 PM Report #488945 Posted December 29, 2012 at 07:15 PM (edited) Quando fazes gets() e o utilizador carrega apenas em ENTER, o resultado é a string vazia. Nao precisas de nada especial para o efeito que pretendes. mas nao uses gets()! é impossivel usar esta funcao de forma segura e existe uma outra que a pode perfeitamente substituir: fgets(). Alem disto, a ultima versao do Standard nao contem a funcao gets(). Quando todos os compiladores passarem a usar C11, o teu programa deixa de ser valido. Edited December 29, 2012 at 07:18 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
jOrGe.mRNh Posted December 29, 2012 at 07:24 PM Author Report #488946 Posted December 29, 2012 at 07:24 PM Boas, Muito obrigado pela ajuda, O fgets penso que não funciona aqui, uma vez que se trata de uma função para usar com ficheiros. Eu estou a tratar só mesmo com um ficheiro. Quanto ao programa, tou a testá-lo e se o utilizador pretender alterar o campo, o caracter que vai testar a ver se e o \n vai ser o primeiro caracter que introduz, e se meter por exemplo "ana" o primeiro a nao fica guardado na string x. :S Como posso dar a volta a isto? Cumps
HappyHippyHippo Posted December 29, 2012 at 07:45 PM Report #488947 Posted December 29, 2012 at 07:45 PM O fgets penso que não funciona aqui, uma vez que se trata de uma função para usar com ficheiros. Eu estou a tratar só mesmo com um ficheiro. Tudo é um ficheiro !!! fgets(buffer, buffer_size, stdin); // stdin <-> normalmente é o teclado Quanto ao programa, tou a testá-lo e se o utilizador pretender alterar o campo, o caracter que vai testar a ver se e o \n vai ser o primeiro caracter que introduz, e se meter por exemplo "ana" o primeiro a nao fica guardado na string x. :S Como posso dar a volta a isto? char buffer[256]; // ler o teclado fgets(buffer, 256, stdin); // remover o carater '\n' se existir if (buffer[strlen(buffer) - 1] == '\n'); buffer[strlen(buffer) - 1] = '\0'; // verificar entrada vazia if (strlen(buffer) == 0) { // entrada vazia } else { // dados inseridos } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
jOrGe.mRNh Posted December 29, 2012 at 07:49 PM Author Report #488948 Posted December 29, 2012 at 07:49 PM Boas, Muito obrigado pela ajuda. Acabei por optar por utilizar um caracter em vez do enter. Apesar de nao ser tao intuitivo, o programa e suposto ser avaliado com material mais simples de c :S Cumps
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now