2014-06-16 6 views
2

Donc, voici mes toutes premières questions sur Stack Overflow. Je suis en train d'apprendre le C++ après une expérience difficile avec MATLAB. J'ai un exercice simple qui se construit bien, mais ne produit pas le résultat attendu.Sortie inattendue dans cout

Je ne reçois aucune erreur non plus. Je cours Xcode 5.

Je suspecte que le problème a quelque chose faire avec l'initialisation de mes variables. Quand je regarde dans le débogage, mes variables restent mis à 0.

#include <iostream> 
using namespace std; 

int main() 
{ 

//Declare variables 
int score = 0; 

//input score 
    cout << "Emter score: "; 
    cin >> score; 


if (score == 100) 
{ 
    cout << "Final Score: " << score; 
    cout << "You received a perfect score! \n"; 
    // 100% is an A. 
} 
else if ((score >= 90) && (score <= 100)) 
{ 
    cout << "Final Score: " << score; 
    cout << "Your grade is an A. Nice Job! \n"; 
    // 90-100 is an A. 
} 
else if ((score >= 80) && (score <= 89)) 
{ 
    cout << "Final Score: " << score; 
    cout << "Your grade is a B. Well done. \n"; 
    // 80-89 is a B. 
} 
else if ((score >= 70) && (score <= 79)) 
{ 
    cout << "Final Score: " << score; 
    cout << "Your grade is a C. Really? \n"; 
    // 70-79 is a C. 
} 
else if ((score >= 60) && (score <= 69)) 
{ 
    cout << "Final Score: " <<score; 
    cout << "Your grade is a D. You suck. Seriously. \n"; 
    // 60-69 is a D. 
} 
else if ((score >= 0) && (score <= 59)) 
{ 
    cout << "Final Score: " << score; 
    cout << "You got an F! YOU FAIL! GO JUMP OUT THE WINDOW. \n"; 
    // 0-59 is an F. 
} 

return 0; 
} 

Désolé pour le long post, je ne voulais pas laisser quoi que ce soit. Merci encore. ETA: Correction des caractères de nouvelle ligne. J'ai retapé le code en ligne pour la ligne et ça s'est bien passé. Je soupçonne que ça a quelque chose à voir avec la façon dont tout ça est joué, mais je ne suis pas sûr.

+3

"ne produit pas le résultat attendu." - Veuillez décrire votre contribution, les résultats que vous avez reçus et en quoi cela diffère de ce que vous attendiez –

+3

Pourquoi avez-vous "/ n" au lieu de "\ n" ou plus correctement "<< endl"? – Matt

Répondre

2

Bienvenue dans SO, et en C++!

Ce problème peut tous se résumer à une simple faute de frappe - lorsque vous avez utilisé le caractère de nouvelle ligne , vous avez tapé une barre oblique (au lieu de back-); le caractère de nouvelle ligne correct est \n.

Il est en fait une autre méthode pour produire le caractère de nouvelle ligne comme suit:

cout << endl; 

qui est la méthode je recommande, au moins pour l'instant, alors que vous avez aucune raison de choisir un sur L'autre. Others disagree however, and would advocate the use of \n. Le difference between the two est que endl effectue une chasse d'eau , alors que \n ne le fait pas (et /ncertainement ne fait pas!) - du moins pas en standard. Si tout ce flush talk sonne comme je suis allé potty - juste l'ignorer, s'en tenir à endl (sauf si vous êtes sur un cours où votre instructeur a spécifié d'utiliser \n), et vous ne manquerez pas de rencontrer plus à propos des tampons et des bouffées de chaleur bientôt! En supposant que votre "sortie inattendue" était "tout est sur la même ligne et il dit '/ n' partout" - c'est tout ce que vous avez besoin de faire pour réparer (vous pouvez aller de l'avant et supprimer ces '/ n').


NB: La raison de /n vs \n est que \ est le caractère d'échappement - qui est, ce qui le suit est dit se sont échappés. Ainsi, dans le caractère de nouvelle ligne, \n, n est échappé, et nous ne voyons pas un 'n' affiché dans cout.

Mais que ne signifie pas que le n n'est pas important! Ensemble avec \ il forme un seul ASCII character (seul sera sera important plus tard, lorsque vous commencez à manipuler des variables du type char) pour imprimer une nouvelle ligne.Inversement, / est pas le caractère d'échappement, donc quand vous avez utilisé /n vous avez vu à la fois / et n affichés.

+1

Ma méthode préférée pour sortir une nouvelle ligne est 'cout << '\ n''. C'est une perte de temps pour faire un flush explicite quand ce n'est pas nécessaire. –

+0

@MattMcNabb Pour quelqu'un de nouveau en C++, je recommande personnellement de laisser std :: endl faire son truc. Le manque de bouffées de chaleur m'a causé assez de maux de tête quand j'ai commencé, et la sortie erronée peut sembler vraiment bizarre quand vous n'avez pas encore entendu parler des flux et des tampons. – OJFord

+0

Certaines personnes ne sont pas d'accord: http://stackoverflow.com/questions/8311058/n-or-n-or-stdendl-to-stdcout – PlasmaHH

0

J'ai nettoyé votre code et j'ai noté certaines pratiques courantes qui peuvent être utiles à connaître. En outre, comme la réponse précédente mentionné la cause la plus probable de votre problème était le caractère de nouvelle ligne. Bienvenue dans le merveilleux monde de C++!

comprennent

using namespace std;

int main() 
{ 

    //Declare variables 
    double score = 0;   //this should really be a double if we are talking about grades 

    //input score 
    cout << "Enter score: "; 
    cin >> score; 

    cout << "Final Score: " << score << endl; //endl is the more common line ending that I've seen 
              // with my experience in C++ 
    cout << "Your grade is a";    //you can remove all commonalities between if 
              // statements to save yourself some typing 
              // This is also common practice 

    if (score == 100) 
    { 
     cout << " perfect score!" << endl; 
     // 100% is an A. 
    } 
    else if (score >= 90 && score < 100)  //we use < 100 instead of <= 99 because what about 
              // numbers between 99 and 100 
    { 
     cout << "n A. Nice Job!" << endl; 
     // 90-100 is an A. 
    } 
    else if (score >= 80 && score < 90) 
    { 
     cout << " B. Well done." << endl; 
     // 80-89 is a B. 
    } 
    else if (score >= 70 && score < 80) 
    { 
     cout << " C. Really?" << endl; 
     // 70-79 is a C. 
    } 
    else if (score >= 60 && score < 70) 
    { 
     cout << " D. You suck. Seriously." << endl; 
     // 60-69 is a D. 
    } 
    else            //if we are not handling errors (assuming user 
                 // enters 0 to 100), we can just say else 
    { 
    cout << "n F! YOU FAIL! GO JUMP OUT THE WINDOW." << endl; 
    // 0-59 is an F. 
    } 

    return 0; 
} 
+0

Pourquoi devrait-il être «vraiment un double si on parle de notes»? Pour autant que vous le sachiez, ce score est sur 100, ce qui rend les valeurs fractionnaires impossibles, et certainement dans la plage de 'int'. Expliquez au moins l'utilisation de «double», donc OP ne pense pas que c'est juste quelque chose que nous utilisons pour parler des notes scolaires. – OJFord

+0

La raison pour laquelle je dis que nous devrions utiliser un double est que ce programme est maintenant plus polyvalent. Il ne s'applique pas seulement à une seule note, mais il peut s'appliquer à une note de cours calculée avec des décimales. Oui, l'utilisation de int réduit la quantité de mémoire que nous utilisons, mais avec une seule variable, la mémoire est négligeable. – user3735633

+1

Merci pour l'aide. Je semble avoir pris le coup maintenant. Je viens de commencer à apprendre le C++ sérieusement cette semaine. Je trouve ça très logique, mais c'est parfois difficile de garder un œil sur la syntaxe. Je suis sûr que cela viendra comme je développe de meilleures pratiques de codage. Merci encore. – Samson