Exercício com Switch-Case

Exercício com Switch-Case

por Rebeca Bayeh -
Número de respostas: 3

Encontrei alguns problemas ao compilar o exercício passado em aula("Programa que conta dígitos, brancos e outros"), dia 5 de novembro, que vou colar na parte de baixo da mensagem.

-O compilador reclama que eu não inicializei a variável "c"; mas o próprio getchar() não cumpre esta função?

-Sobre o "EOF"... se eu simplesmente digito (no Windows) a sequencia ctrl+C, o programa fecha. Como evitar isso, e verificar se o programa realmente contou os caracteres? e como eu faria para usar isso em um arquivo de texto comum?

Obrigada!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

#include <stdio.h>
int main(){
    int c, i, nwhite=0, nother=0, ndigit[10];
    for(i=0;i<10;i++)
        ndigit[i]=0;
       
        while ((c==getchar())!=EOF) {
           
            switch(c){
                case 0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':
                    ndigit[c-'0']++;
                    break;
               
                case ' ':case'\n':case'\t':
                    nwhite++;
                    break;
                   
                default:
                    nother++;
                    break;        
            }/*switch*/
        } /*while*/
        printf("Digitos:\n");
           
        for(i=0;i<10;i++)
            printf("%d: %d vezes;\n",i, ndigit[i]);
           
        printf("Brancos: %dvezes;\nDemais: %d vezes.\n",nwhite, nother);
        return 0;
}/*main*/

Em resposta à Rebeca Bayeh

Re: Exercício com Switch-Case

por Francisco Reverbel -
Troque a linha

    while ((c==getchar())!=EOF) {

por

    while ((c=getchar())!=EOF) {

Em vez de comparar o valor da variável c com o valor devolvido pela chamada a getchar(), o que você quer é guardar na variável c o valor devolvido pela chamada a getchar()!

A chamada a getchar(), sozinha, não inicializa nada. O que inicializa a variável c é a atribuição c = getchar(), feita dentro da condição do while. Note que o programa que você colou acima fica comparando o valor da variável c com o valor devolvido pelas chamadas a getchar(), sem nunca inicializar a variável c!

O programa que eu coloquei na lousa tinha mesmo esse erro?

Em resposta à Francisco Reverbel

Re: Exercício com Switch-Case

por Rebeca Bayeh -

Obrigada!

Hm, na verdade existe grande probabilidade de eu ter copiado errado mesmo...

Mas e a respeito do EOF?

Em resposta à Rebeca Bayeh

Re: Exercício com Switch-Case

por Francisco Reverbel -
Pelo teclado, para dizer que acabou a entrada (EOF), use uma das seguintes combinações de teclas:

No Linux: Ctrl-D

No Windows: Ctrl-Z. O Ctrl-Z tem que ser digitado no início da linha e tem que ser seguido de Enter. (Isto é, digite uma linha contendo apenas o Ctrl-Z.)

Para rodar o programa sobre um arquivo de texto comum, use o redirecionamento de entrada:

nome_do_programa < nome_do_arquivo de entrada