Jump to content
Fast7

Como contar caracteres '\0' ou \n ou newline e continuar a contar os caracteres

Recommended Posts

Fast7

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 by pwseo
Post completamente reformatado

Share this post


Link to post
Share on other sites
PsySc0rpi0n

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

Share this post


Link to post
Share on other sites
Fast7

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

Share this post


Link to post
Share on other sites
Rui Carlos

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) {
    ...
}

 

Share this post


Link to post
Share on other sites
Fast7

Boa tarde,

Ficou resolvido, muito obrigado, o problema estava mesmo em não ter usado o EOF.

Senhor Rui Carlos, muito muito obrigado

Edited by Fast7

Share this post


Link to post
Share on other sites
Vertygo
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 by Vertygo
code nok

Share this post


Link to post
Share on other sites
Rui Carlos

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.

Share this post


Link to post
Share on other sites
Vertygo
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);
}

 

Share this post


Link to post
Share on other sites
Rui Carlos

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.)

Share this post


Link to post
Share on other sites
Fast7

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

Share this post


Link to post
Share on other sites
HappyHippyHippo
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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.