c++ - 简单的输入/输出控制台应用程序,不按给定顺序打印问题(结构性)

标签 c++ cout cin

这个程序是我用我在互联网上找到的碎片为我的 gf 请求制作的。 它应该按照程序中给出的顺序提问(是的,我知道他们是波兰人,但他们说什么并不重要)(这很重要)并且它工作正常但只有当你用一个单词或字母回答时。 .. 例如"is"或“Y” - 如果您回答“是是”,它将跳过第二个问题并直接进入第三个问题。基本上你用来回答单个问题的单词越多,程序跳过的问题就越多(例如,你在第一个问题中回答“是是是”,你可以看到它会跳过 3 个问题并转到第四个问题,然后,如果您回答"is",它将正常工作并转到下一个(第五个)问题)

我希望我写的内容很清楚,我不熟悉 C++,因为我不喜欢那种语言,但它仍然必须完成,所以我已经准备好了,帮帮伙计们。

附言。如果有人想知道的话,std::string PL(const char * text) 模块只是为了得到一个波兰字母。

#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);


}

最佳答案

根据 << 的提取运算符 ( cin ) 的文档,

[...] it always considers spaces (whitespaces, tabs, new-line...) as terminating the value being extracted, and thus extracting a string means to always extract a single word, not a phrase or an entire sentence.

(参见 http://www.cplusplus.com/doc/tutorial/basic_io/ “cin 和字符串”部分)

因此,您所观察到的与记录的行为完全一致:如果您键入“yes1 yes2”并按回车键,cin << my_string_variable指令将在 my_string_variable 中存储“yes1”它将为下一个 cin 保留“yes2” .

要解决此问题,请使用以下方法:

getline (cin, my_string_variable);

关于c++ - 简单的输入/输出控制台应用程序,不按给定顺序打印问题(结构性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186059/

相关文章:

c# - Hook Window的消息循环时,KBDLLHOOKSTRUCT的dwExtraInfo是干什么用的

c++ - 这个C++程序有什么问题?

c++ - 在 C++ 中使用 cout 递增和递减

c++ - ostream 引用运算符 <<

c++ - 等到用户在 C++ 中按下 Enter 键?

c++ - 从 std::unique_ptr<Dervied> 到 std::unique_ptr<Base> 的转换成本是多少?

c++ - 为什么打印 &some_buf[0] 和 &some_buf 会给出不同的输出?

C++ 守护进程静默模式

c++ - 检查 "cin"是否为字符串

c++ - 在紧密循环中使用 cin.get()