Godofredo Posted January 17, 2024 at 09:46 PM Report #632642 Posted January 17, 2024 at 09:46 PM 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.
iznougudpt Posted January 18, 2024 at 10:40 AM Report #632645 Posted January 18, 2024 at 10:40 AM 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. 1 Report
Godofredo Posted January 18, 2024 at 06:57 PM Author Report #632646 Posted January 18, 2024 at 06:57 PM Obrigado pela resposta @iznougudpt. Já meti as chavetas mas o resultado não alterou. Quando pressiono enter para mudar de linha significa '\n'. '\r' seria para escrever no início da mesma linha, creio que o erro não esteja aí.
Solution Rui Carlos Posted January 18, 2024 at 07:51 PM Solution Report #632647 Posted January 18, 2024 at 07:51 PM 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). Rui Carlos Gonçalves
Godofredo Posted January 18, 2024 at 09:32 PM Author Report #632648 Posted January 18, 2024 at 09:32 PM Olá @Rui Carlos. Já consegui resolver o problema. O meu erro estava na interpretação do ciclo que depois consegui perceber, socorrendo-me desse printf que sugeriste. Obrigado pela ajuda.
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