Jump to content

Contagem de linhas e caracteres em C


Go to solution Solved by Rui Carlos,

Recommended Posts

Posted

Boa noite. Estou a tentar criar um programa que conte o número de linhas e caracteres a partir do standard input (stdin). O código que implementei está descrito em baixo:

 

#include <stdio.h>

int main()
{
    char nomes[200]; 
    int caracteres = 0;
    int nlinhas = 0;
    int i;
      
    while (fgets(nomes, 200, stdin) && nomes[0]!='\n')
    {
        for(i=0; i<=200; i++)
            
         if (nomes[i]=='\n')
            caracteres+=i;
            nlinhas++;       
    }     
            fprintf(stdout, "%d %d",nlinhas,caracteres);
}

 

O programa contabiliza corretamente o número de linhas mas não o número de caracteres. Se executar apenas uma linha de texto a contagem dos caracteres surge correta. De referir que os espaços também são contemplados  para a contagem de caracteres (é suposto isto verificar-se para o exercício em causa). 

Deixo aqui um exemplo do output do programa onde o resultado esperado seria 4 28 e o que aparece é 4 35: https://files.fm/u/24kgbn2b36

Alguém tem uma sugestão?

Obrigado.

Posted

Primeiro começa a pôr os parêntesis ou vais começar a ter problemas sem saberes porquê.

for(i=0; i<=200; i++)
{       
  if (nomes[i]=='\n')
  {
    caracteres+=i;
    nlinhas++; 
  }
}

O teu problema deve ser estar a contar o \r que costuma vir junto com o \n.

  • Vote 1
  • Solution
Posted

Vamos supor que introduzes 123456\n na primeiro linha, e depois 123\n.

Qual será o conteúdo de nomes depois da segunda linha ser introduzida?  Quantos caracteres vais contar para a segunda linha?

 

Se ainda não percebeste o problema, coloca uma linha como printf("Adicionando %d caracteres ao contador\n", i); dentro do if.

 

Adicionalmente:

  • Com i<=200, qual é o valor máximo de i que podes ter?  E qual é o índice máximo do array nomes a que poderás tentar aceder?
  • É suposto o teu programa aceitar linhas com 200 caracteres?  Ou até com 199?  Se sim, experimente esses casos (e volta a pensar se a comparação com \n chega).

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.