Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Fast7

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

Mensagens Recomendadas

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]); 
Editado por pwseo
Post completamente reformatado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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) {
    ...
}

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por Fast7

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por Vertygo
code nok

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);
}

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.