2016-06-12 2 views
-1
#include <stdio.h> 

int main(void) 
{ 

    char ch; 
    int count; 

    while((ch=getchar())!=EOF){ 
     if(ch==' '){ 
      count++; 
     } 
    } 
    printf("total words is %d",count); 
    return 0; 
} 

mon code C est ici, je suis confus où je mets ctrl + Z directement dans les fenêtres, tourner en compte est 2? Pourquoi il boucle aller pour deux et où vient l'espace?compteur en fonction de la valeur de retour getchar donne mal oputput

+0

Attribution ce qui est renvoyé de 'getchar()' à la variable ayant le type 'char' est mauvaise parce qu'elle tronque les données et rendent la distinction d'un caractère et «EOF» impossible dans un environnement typique. Utiliser 'int' est bon. – MikeCAT

+0

Relié, sinon un dupe à: http://stackoverflow.com/q/35356322/694576 – alk

+0

S'il vous plaît lire les manuels pour toutes les fonctions de la bibliothèque que vous souhaitez utiliser. –

Répondre

4

Le plus gros problème ici est que vous avez laissé count non initialisé. Donc, que le if soit un succès ou non, vous finirez par lire une variable locale unitalisée qui appelle undefined behavior.

Vous devez toujours initialiser les variables locales, comme

int count = 0; 

Cela dit, getchar() retourne un int. Stocker cela dans un char est faux parce que dans le cas où la fonction renvoie EOF (comme vous vous attendez ici), il ne rentre pas dans un char.

En ce qui concerne EOF Marco, citant C11, chapitre §7.21.1

EOF
qui se dilate à une expression constante entière , avec le type int et une valeur négative, que est renvoyée par plusieurs fonctions pour indiquer la fin du fichier, c'est-à-dire, plus aucune entrée d'un flux ;

Donc, vous devez changer le type de ch de char à int, comme

int ch = 0; 
+0

merci beaucoup! – a86356

+2

au lieu de dire merci, vous pouvez accepter une réponse si elle résout votre problème. – mssirvi