2015-08-26 1 views
0

J'essaie d'utiliser la variable "ch" après l'avoir attrapé avec la fonction getch() à partir d'une expression dans une boucle. Je ne peux pas l'utiliser du tout car il renvoie toujours le même code char (1 que int). Je sais que je peux simplement utiliser while (1) et faire fonctionner getch() à partir de là, mais c'est considéré comme une mauvaise pratique et je me demande pourquoi ça ne fonctionne pas comme ça.getch() à l'intérieur while boucle renvoie toujours 1

#include <iostream> 
#include <conio.h> 

int main() 
{ 
    while (char ch = getch() != 'q') 
    { 
     std::cout << ch; 
    } 
} 

J'utilise le code :: blocks 13.12 avec le compilateur GNU GCC

par la façon .. cela ne fonctionne pas trop

int main() 
{ 
    char ch; 
    while (ch = getch() != 'q') 
    { 
     std::cout << ch; 
    } 
} 
+0

[priorité de l'opérateur] (https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) –

+0

de règle générale, l'affectation ne jamais mettre à l'intérieur – khuderm

Répondre

5

Vous aller à l'encontre de operator precedence. Il est comme si vous aviez écrit:

while (ch = (getch() != 'q')) 

qui sera 1 jusqu'à ce qu'un q est entré, à quel point il sera 0.

Vous voulez dire:

while ((ch = getch()) != 'q') 

Et, comme Filipe Gonçalves mentions, ch devrait être déclarée comme int, non char (getch() retourne un int)

+0

conditionnelle Un autre problème avec le code est qu'il semble déclare 'ch' comme un' char', alors que 'getch (3)' renvoie 'int'. Cela devrait être traité, et je pense qu'il mérite d'être mentionné. –

+0

True. Plus d'inquiétude s'il vérifiait pour EOF, mais certainement mauvaise pratique. –

2

Essayez cela, vous avez eu tort ordre de opérations. Déplacez l'affectation vers la droite ou ajoutez des parenthèses.

#include <iostream> 
#include <conio.h> 

int main() 
{ 
    char ch; 
    while ((ch = getch()) != 'q') 
    { 
     std::cout << ch; 
    } 
} 

Notez qu'il n'est pas recommandé de déclarer une variable dans l'expression conditionnelle de la boucle.