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

Simple input/output console application, does not print the questions in the given order (structural)

本文关键字:顺序 结构 问题 打印 输出 输入 控制台 应用程序 简单      更新时间:2023-10-16

这个程序是我用在网上找到的废料为我的女朋友制作的。它应该按照程序中给出的顺序问问题(是的,我知道他们是用波兰语问的,但他们说什么并不重要)(这很重要),它工作得很好,但只有当你用一个单词或字母回答时…例如"Yes"或"Y"——如果你回答"Yes Yes",它会跳过第二个问题,直接进入第三个问题。基本上,你在回答一个问题时使用的单词越多,程序就会跳过越多的问题。如果你在第一个问题中回答了"yes yes yes",你可以看到它会跳过3个问题,进入第四个问题,然后如果你回答"yes",它会正常工作,并进入下一个(第五)问题

我希望我写的很清楚,我不熟悉c++,因为我不喜欢那种语言,但它必须要做,所以我得到了所以,帮助伙计们。

p。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:nn");
    cout <<PL("Witaj, chciałbym żebyś wytłumaczył mi dzieło sztuki.nn");
    Sleep(3000);
    cout <<PL("Wciśnij ENTER jeśli jesteś gotowy.");
    _getch();
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Do czego sluży żaba, a do czego szutka?nn");
    cin >>odpowiedz1;
    system("cls");

    cout <<PL("martwy zając:nn");
    cout <<PL("Która łapa tego kota jest ładniejsza?nn");
    cin >>odpowiedz2;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Czy ta łapa, która bardziej się Tobie podoba jest ładniejsza gdy kot miauczynprosząc o jedzenie, czy jak miauczy prosząc o pieszczotę?nn");
    cin >>odpowiedz3;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Czy wolisz dzwięk tramwaju dobiegający zza okna w mroźny poranek, czy w jesiennywieczór?nn");
    cin >> odpowiedz4;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Czy możesz opisać smak ciastka które jadłeś ostatnio?nn");
    cin >> odpowiedz5;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Namalujesz mi ten smak, jaki ma kolor?nn");
    cin >> odpowiedz6;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Na kafelki w łazience upadła mi gąbka - jakiego koloru jest dzwięk który wydała?nn");
    cin >> odpowiedz7;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Na kafelki w łazience upadła mi szklanka, nie rozbiła się - jakiego koloru dzwięk wydała?nn");
    cin >> odpowiedz8;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Cyfra 4 jest niebieska czy szara?nn");
    cin >> odpowiedz9;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Wchodzę. Czy widzę światło?nn");
    cin >> odpowiedz10;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Wchodzę. Czy słyszę światło?nn");
    cin >> odpowiedz11;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Wchodzę. Czy czuję smak światła?nn");
    cin >> odpowiedz12;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Cyfra 4 czy zmienia kolor, gdy staje się liczbą?nn");
    cin >> odpowiedz13;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Biegnę. Co się zmieniło gdy biegnę a nie wchodzę? Widok światła? Dzwięk światła?Smak światła?nn");
    cin >> odpowiedz14;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Gdy pytałam o kolor smaku ciastka, jakie pytanie usłyszałeś/aś?nn");
    cin >> odpowiedz15;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Jaki kolor ma słowo "sztuka?"nn");
    cin >> odpowiedz16;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Jaki kolor ma słowo "religia?"nn");
    cin >> odpowiedz17;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Jaki kolor ma słowo "jestem?"nn");
    cin >> odpowiedz18;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Godzina 16:30 jest sześcianem, kulą, czy inną bryłą?nn");
    cin >> odpowiedz19;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Godzina 4:30 (po południu) jest sześcianem, kulą, czy inną bryłą?nn");
    cin >> odpowiedz20;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Jak przekroczyć zmysłowy pozór sztuki?nn");
    cin >> odpowiedz21;
    system("cls");
    cout <<PL("martwy zając:nn");
    cout <<PL("Dziękujęnnn");
    Sleep(3000); 
    cout <<PL("Żegnaj.");
    Sleep(2000);

}

根据cin的提取操作员(<<)的文档,

[…]它总是考虑空格(空格、制表符、换行符…)作为被提取值的终止符,因此提取字符串意味着总是提取单个单词,而不是一个短语或整个句子。

(参见http://www.cplusplus.com/doc/tutorial/basic_io/"cin和字符串"一节)

因此,您所观察到的与文档中的行为完全一致:如果您输入"yes1 yes2"并按enter键,cin << my_string_variable指令将在my_string_variable中存储"yes1",并将在下一个cin中保留"yes2"。

要克服这个问题,使用以下命令:

getline (cin, my_string_variable);

您需要的是从cin获得一整行输入,并且只处理第一个char。试试下面的代码:

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

关键命令为getline。您可能需要编写一个循环来查找第一个非空格字符,并将大写转换为小写以正则化答案。如果不是"y"或"n",你的代码应该说"对不起,我不明白你的答案。请回答yes (y) or no (n)",并在while循环中再次询问答案。