2016-10-22 1 views
1

Je viens d'apprendre c, et j'utilise le terminal Linux. J'ai écrit le code simple suivant, mais quand je tape les entrées, le fichier ne se termine pas et ne compte donc pas le nombre de caractères. Est-ce que quelqu'un peut m'aider? J'ai aussi essayé d'autres codes d'entrée. C'est la même chose avec tous mes codes relatifs aux entrées. Qu'est-ce que je fais mal? S'il vous plaît aider.L'entrée ne sort pas en c, donc la sortie ne fonctionne pas

main() 
{  
    /* count characters in input */  
    printf("Type some characters and the program will count the number of characters: "); 

    int c = getchar(); 

    while(c!=EOF && c!= '\n')  
     ++c; 

    printf("Number of characters typed: %1d\n", c);  
} 
+3

Vous ne lisez jamais qu'un seul caractère car vous appelez 'getchar' une seule fois. Vous devez l'appeler à plusieurs reprises tant que vous ne rencontrez pas 'EOF' (ou' \ n' ou quelle que soit votre condition d'arrêt, peut-être 'while ((c = getchar())! = EOF)'? – jpw

+0

cette fonction getchar()? La façon de prendre l'entrée est normalement à travers un scanf ("% s", tampon) qui prendra l'entrée et la copiera dans la variable ** buffer ** – Yvain

+2

@Yvain 'getchar' est une fonction standard définie dans stdio.h, si l'OP veut lire char par char scanf ("% s") n'est pas vraiment approprié – jpw

Répondre

0

Donc, pour prendre connaissance des commentaires utiles;

#include <stdio.h> 

int main(){ 
     int c; 
     int count = 0; 

     while((c=getchar()) != '\n' && c != EOF) 
       count++; 
     printf("%d\n", count); 
}; 

Ce code fonctionne comme prévu.

+0

Voulez-vous dire 'while ((c = getchar())! = '\ N' || c! = EOF)' devrait être utilisé? Ne serait-ce pas une boucle sans fin car tous les caractères, même '' \ n'' et 'EOF' ne sont pas égaux à l'un et feront la condition toujours' true'. – alvits

+0

Non, cette boucle signifie: "tant que le caractère d'entrée est ** ni ** 'newline' ** ni ** 'EOF'", si vous avez remplacé ou avec et cela signifierait "tant que l'entrée n'est pas 'newline' ** combiné ** avec 'EOF' ", donc celui-ci ne s'arrêterait jamais vraiment. – Yvain

+0

Vous avez ce mauvais ami. Disons que 'c' est' '\ n''. Votre condition sera évaluée comme 'while ('\ n'! = '\ N' || '\ n'! = EOF)' ===> 'while (false || true)' ===> 'while (true) '. Voyons maintenant si 'c' est' EOF', 'while (EOF! = '\ N' || EOF! = EOF)' ===> 'while (vrai || faux)' ===> 'while (vrai) Pour tout le reste 'while (true || true)'. Quand la boucle se terminera-t-elle? Je ne peux pas croire que je doive taper l'évaluation du code ici. – alvits