2016-08-27 3 views
0

Ce programme j'ai fait pour la demande pour mon gf avec les scraps que j'ai trouvés sur Internet. Son supposé poser les questions (oui je sais qu'ils sont en polonais, mais peu importe ce qu'ils disent) dans l'ordre donné dans le programme (c'est important) et cela fonctionne bien mais seulement si vous répondez avec un seul mot ou lettre ... par exemple "Oui" ou "O" - si vous répondez par "Oui Oui", la deuxième question sera ignorée et la troisième sera envoyée directement au troisième. Fondamentalement, plus vous utilisez de mots pour répondre à une seule question, plus le programme sautera de questions (par exemple, vous avez répondu oui oui oui dans la première question, vous verrez qu'il passera trois questions et passera à la question numéro quatre, et puis si vous répondez "oui" cela fonctionnera correctement et ira à la prochaine (cinquième) question)Application simple de console d'entrée/sortie, n'imprime pas les questions dans l'ordre donné (structurel)

J'espère que son clair ce que j'ai écrit, je ne suis pas familier avec C++ puisque je n'aime pas cette langue encore il doit être fait pour que je sois ainsi posé, HELP GUYS.

Ps. le module PL (const char * text) de std :: string est simplement pour obtenir des lettres polonaises si quelqu'un se demande.

#include <iostream> 

#include <windows.h> 

#include <conio.h> 

#include <stdlib.h> 


using namespace std; 

std::string PL(const char * text) 
{ 
    std::string result; 
    for(; * text; text++) 
    switch(* text) 
    { 
    case 'ą': result += static_cast <char>(0xa5); break; 
    case 'ć': result += static_cast <char>(0x86); break; 
    case 'ę': result += static_cast <char>(0xa9); break; 
    case 'ł': result += static_cast <char>(0x88); break; 
    case 'ń': result += static_cast <char>(0xe4); break; 
    case 'ó': result += static_cast <char>(0xa2); break; 
    case 'ś': result += static_cast <char>(0x98); break; 
    case 'ż': result += static_cast <char>(0xbe); break; 
    case 'ź': result += static_cast <char>(0xab); break; 
    case 'Ą': result += static_cast <char>(0xa4); break; 
    case 'Ć': result += static_cast <char>(0x8f); break; 
    case 'Ę': result += static_cast <char>(0xa8); break; 
    case 'Ł': result += static_cast <char>(0x9d); break; 
    case 'Ń': result += static_cast <char>(0xe3); break; 
    case 'Ó': result += static_cast <char>(0xe0); break; 
    case 'Ś': result += static_cast <char>(0x97); break; 
    case 'Ż': result += static_cast <char>(0xbd); break; 
    case 'Ź': result += static_cast <char>(0x8d); break; 
     default: result += * text; break; 
    } 
    return result; 
} 


int main() 
{ 
    SetConsoleTitle ("martwy zajac"); 


HWND hwnd = GetConsoleWindow(); 
if(hwnd != NULL){ MoveWindow(hwnd ,340,100 ,800,300 ,TRUE); } 


    string odpowiedz1,odpowiedz2,odpowiedz3,odpowiedz4,odpowiedz5,odpowiedz6,odpowiedz7,odpowiedz8,odpowiedz9,odpowiedz10,odpowiedz11,odpowiedz12,odpowiedz13,odpowiedz14,odpowiedz15,odpowiedz16,odpowiedz17,odpowiedz18,odpowiedz19,odpowiedz20,odpowiedz21; 



    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Witaj, chciałbym żebyś wytłumaczył mi dzieło sztuki.\n\n"); 
    Sleep(3000); 
    cout <<PL("Wciśnij ENTER jeśli jesteś gotowy."); 
    _getch(); 

    system("cls"); 
    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Do czego sluży żaba, a do czego szutka?\n\n"); 
    cin >>odpowiedz1; 
    system("cls"); 


    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Która łapa tego kota jest ładniejsza?\n\n"); 
    cin >>odpowiedz2; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Czy ta łapa, która bardziej się Tobie podoba jest ładniejsza gdy kot miauczy\nprosząc o jedzenie, czy jak miauczy prosząc o pieszczotę?\n\n"); 
    cin >>odpowiedz3; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Czy wolisz dzwięk tramwaju dobiegający zza okna w mroźny poranek, czy w jesiennywieczór?\n\n"); 
    cin >> odpowiedz4; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Czy możesz opisać smak ciastka które jadłeś ostatnio?\n\n"); 
    cin >> odpowiedz5; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Namalujesz mi ten smak, jaki ma kolor?\n\n"); 
    cin >> odpowiedz6; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Na kafelki w łazience upadła mi gąbka - jakiego koloru jest dzwięk który wydała?\n\n"); 
    cin >> odpowiedz7; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Na kafelki w łazience upadła mi szklanka, nie rozbiła się - jakiego koloru dzwięk wydała?\n\n"); 
    cin >> odpowiedz8; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Cyfra 4 jest niebieska czy szara?\n\n"); 
    cin >> odpowiedz9; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Wchodzę. Czy widzę światło?\n\n"); 
    cin >> odpowiedz10; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Wchodzę. Czy słyszę światło?\n\n"); 
    cin >> odpowiedz11; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Wchodzę. Czy czuję smak światła?\n\n"); 
    cin >> odpowiedz12; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Cyfra 4 czy zmienia kolor, gdy staje się liczbą?\n\n"); 
    cin >> odpowiedz13; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Biegnę. Co się zmieniło gdy biegnę a nie wchodzę? Widok światła? Dzwięk światła?Smak światła?\n\n"); 
    cin >> odpowiedz14; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Gdy pytałam o kolor smaku ciastka, jakie pytanie usłyszałeś/aś?\n\n"); 
    cin >> odpowiedz15; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Jaki kolor ma słowo \"sztuka?\"\n\n"); 
    cin >> odpowiedz16; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Jaki kolor ma słowo \"religia?\"\n\n"); 
    cin >> odpowiedz17; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Jaki kolor ma słowo \"jestem?\"\n\n"); 
    cin >> odpowiedz18; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Godzina 16:30 jest sześcianem, kulą, czy inną bryłą?\n\n"); 
    cin >> odpowiedz19; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Godzina 4:30 (po południu) jest sześcianem, kulą, czy inną bryłą?\n\n"); 
    cin >> odpowiedz20; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Jak przekroczyć zmysłowy pozór sztuki?\n\n"); 
    cin >> odpowiedz21; 
    system("cls"); 

    cout <<PL("martwy zając:\n\n"); 
    cout <<PL("Dziękuję\n\n\n"); 
    Sleep(3000); 
    cout <<PL("Żegnaj."); 
    Sleep(2000); 


} 
+0

Ce dont vous avez besoin c'est 'std :: ignore'. – DimChtz

Répondre

1

Selon la documentation de l'opérateur d'extraction (<<) de cin,

[...] il considère toujours des espaces (espaces blancs, des onglets, une nouvelle ligne ...) comme terminaison la valeur extraite, et donc extraire une chaîne signifie toujours extraire un seul mot, pas une phrase ou une phrase entière.

(Voir la section http://www.cplusplus.com/doc/tutorial/basic_io/ « cin et cordes »)

Alors, ce que vous observez est exactement en ligne avec le comportement documenté: si vous tapez « oui2 oui1 » et appuyez sur Entrée, l'instruction cin << my_string_variable sera stocker "yes1" dans my_string_variable et il gardera "yes2" pour le prochain cin.

Pour résoudre ce problème, utilisez les touches suivantes:

getline (cin, my_string_variable); 
+1

Ça marche! Merci beaucoup Mike !! Passez une bonne journée :) éditer: oh vous êtes de Grèce, puis dormez bien;)) – Wojciech

0

Qu'est-ce que vous avez besoin est d'obtenir une ligne entière d'entrée de cin et le traitement que la première char. Essayez le code suivant:

#include <iostream> 
    using namespace std; 
    int main(){ 
    char a[1000],c; 
    cin.getline(a,1000); 
    cout<<"\nThe string received:"<<endl<<a<<endl; 
    cout<<"\nThe answer to process:"<<endl<<a[0]<<endl; 
    return 0; 
    } 

La commande clé est getline. Vous devrez peut-être écrire une boucle pour trouver le premier caractère non-espace et tourner les majuscules en minuscules pour régulariser la réponse. Si ce n'est ni «ni» ni «n», votre code devrait indiquer «Désolé, je ne comprends pas votre réponse. Veuillez dire oui (y) ou non (n)» et demander à nouveau la réponse dans une boucle while.