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

时间:2016-08-27 21:51:28

标签: c++ cout cin

这个程序是我用我在互联网上发现的碎片请求我的gf。 它假设按照程序中给出的顺序(重要的)提出问题(是的,我知道它们是抛光的,但它们并不重要),并且它工作正常但是只有当你用一个单词或一个字母回答时。 ..例如"是"或" Y" - 如果你的回答是"是的"它将跳过第二个问题并直接进入第三个问题。基本上你用来回答单个问题的单词越多,程序跳过的问题就越多(fe。你回答"是是是"在第一个问题中,你可以看到它会跳过3个问题然后去问题四,然后如果你回答"是"它将正常工作并将转到下一个(第五个)问题)

我希望它清楚我写的内容,我不熟悉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);


}

2 个答案:

答案 0 :(得分:1)

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

  

[...]它始终将空格(空格,制表符,换行符......)视为终止正在提取的值,因此提取字符串意味着始终提取单个单词,而不是短语或整个单词句。

(参见http://www.cplusplus.com/doc/tutorial/basic_io/部分“cin and strings”)

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

要解决此问题,请使用以下命令:

getline (cin, my_string_variable);

答案 1 :(得分:0)

您需要的是从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。您可能需要编写一个循环来查找第一个非空格字符并将大写字母转换为小写以规范答案。如果它既没有&#39; y&#39;或者&#39; n&#39;你的代码应该说&#34;抱歉,我不明白你的答案。请说是(y)或否(n)&#34;并在while循环中再次询问答案。