Fast7 0 Posted January 6, 2019 Report Share Posted January 6, 2019 (edited) Boa noite a todos, Após muitas horas a partir pedra no pc e depois de muita consulta na internet continuo com um problema muito complicado que me parece ter uma solução simples mas qual????? Passo a explicar, a titulo de exemplo tenho seguinte input por parte do utilizador: Portugal França Alemanha e Japão Espanha Já consegui contar todos os caracteres e separa-los mediante determinadas características usando por exemplo while (x!='P') { if (x=='P')....elseif.... e conto em cada essa letra para um contador que no fim me dará o total. No entanto, quando a função dá de caras com o \n deixa de contar. Já usei scanf("%c", &x) e consegui reproduzir todos os valores de entrada no meu outpu, no entanto quando terminam as letras, ele continua até ao infinito.... Reparei que o input do utilizador em ASCII termina com 10 10 , ou seja newline=\n newline=\n. Já estou doido com isto, parecia tão fácil e agora até olheiras tenho de tanto tempo a ler , ver videos e exprimentar o código. Alguém tem uma ideia de como ler newline=\n ( até aqui consegui, o pior é parar) e continuar a contar até terminar no 10 10. // obter a cada um e colocar numa posição do vetor do { scanf("%c", &str); printf("%c", str); if ((str == 'a' || str == 'e' || str == 'i' || str == 'o' || str == 'u') || (str == 'A' || str == 'E' || str == 'I' || str == 'O' || str == 'U')) { letrasv++; } } while(str!=str[i-1]); Edited January 13, 2019 by pwseo Post completamente reformatado Link to post Share on other sites
PsySc0rpi0n 18 Posted January 6, 2019 Report Share Posted January 6, 2019 Mostra o code todo e usa as tags code e /code para postares aqui. Eu não percebi come exactidão o problema! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer Link to post Share on other sites
Fast7 0 Posted January 6, 2019 Author Report Share Posted January 6, 2019 code int main() { int i=0, n=1; char z,x=10,y=11; for (i = 0; i < n; ++i) { scanf("%c ", &x); printf("%c %d", x, x); n++; } } /code Com isto consigo reproduzir todos os caracteres e o seu ASCII. P 80o 111... ... a a 97 a 97 a 97 a 97 ..... nunca mais para code int main() { int i=0, n=1; char z,x=10,y=11; for (i = 0; i < n; ++i) { scanf("%c ", &x); printf("%c ", x); n++; } } /code Com isto consigo reproduzir o input na totalidade mais o tal problema do 10, ele vai repetir até ao infinito o ultimo caracter. Portugal...... ... ... a a a a a ... nunca mais para Link to post Share on other sites
Rui Carlos 359 Posted January 7, 2019 Report Share Posted January 7, 2019 Quando queres ler múltiplas linhas, o normal é usares o EOF (Ctrl-D em Unix) para parar. Nesse caso podes ler o input da seguinte maneira: while(scanf("%c", &str[i]) != EOF) { ... } Rui Carlos Gonçalves Link to post Share on other sites
Fast7 0 Posted January 7, 2019 Author Report Share Posted January 7, 2019 (edited) Boa tarde, Ficou resolvido, muito obrigado, o problema estava mesmo em não ter usado o EOF. Senhor Rui Carlos, muito muito obrigado Edited January 7, 2019 by Fast7 Link to post Share on other sites
Vertygo 0 Posted January 11, 2019 Report Share Posted January 11, 2019 (edited) On 1/7/2019 at 9:14 AM, Rui Carlos said: Quando queres ler múltiplas linhas, o normal é usares o EOF (Ctrl-D em Unix) para parar. Nesse caso podes ler o input da seguinte maneira: while(scanf("%c", &str[i]) != EOF) { ... } Boa tarde. E se pretender ler por stdin? Qual é o aconselhado? Estou com o mesmo problema, mas ao ler por fgets e stdin. O código lê apenas a 1ª linha (e o STDIN será para ler um conjunto de strings com várias linhas distintas) Já tentei por !=NULL e nada parece funcionar... Obrigado pela ajuda que poder dar! AFC Edited January 11, 2019 by Vertygo code nok Link to post Share on other sites
Rui Carlos 359 Posted January 12, 2019 Report Share Posted January 12, 2019 O método para ler mútiplas linhas é igual com o STDIN. A única coisa que muda é a forma como introduzes o EOF. No ficheiro está implícito, mas com o STDIN precisas do Ctrl-D. Rui Carlos Gonçalves Link to post Share on other sites
Vertygo 0 Posted January 12, 2019 Report Share Posted January 12, 2019 52 minutos atrás, Rui Carlos disse: O método para ler mútiplas linhas é igual com o STDIN. A única coisa que muda é a forma como introduzes o EOF. No ficheiro está implícito, mas com o STDIN precisas do Ctrl-D. Obrigado pela dica Rui Carlos, mas continuo a não conseguir as linhas todas. Segue o bloco de exemplo que estou a executar e que apesar do STIN ter cerca de 15 linhas, se fizer o printf apenas escreve a 1ª... int main() { char texto[MAXTEXT]; int contador, count; fgets(texto, MAXTEXT, stdin); if (*texto != EOF); printf("%s", texto); } Link to post Share on other sites
Rui Carlos 359 Posted January 12, 2019 Report Share Posted January 12, 2019 Não estás a usar o scanf. O fgets devolve NULL quando chega ao EOF. (Já agora, o if do código não está aí a fazer nada. Se queres ler várias vezes deves usar um ciclo.) Rui Carlos Gonçalves Link to post Share on other sites
Fast7 0 Posted January 12, 2019 Author Report Share Posted January 12, 2019 Boa tarde, há alguma maneira de fazermos isto com a alocação de memória? Por exemplo armazenar um nome, noutro uma cidade, noutro um país? E após contar os nomes, cidades , países? cumprimentos Link to post Share on other sites
HappyHippyHippo 1,162 Posted January 13, 2019 Report Share Posted January 13, 2019 On 1/12/2019 at 12:52 PM, Fast7 said: Boa tarde, há alguma maneira de fazermos isto com a alocação de memória? Por exemplo armazenar um nome, noutro uma cidade, noutro um país? E após contar os nomes, cidades , países? cumprimentos dá .. mas necessitas de saber de antemão se estás a ler um ou outro IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to post Share on other sites
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