1

このプログラムで一種のアサーションエラーが発生しましたが、残念ながら私はC ++にまったく慣れておらず、これが何を意味するのかわかりません。

#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime> // for time()
#include <windows.h> // for Sleep()

using namespace std;

string TakingInput()
{
    cout << "What do you want to say? ";
    string a;
    getline(cin, a);
    return a;
}

// Generate a random number between nLow and nHigh (inclusive)
unsigned int GetRandomNumber(int nLow, int nHigh)
{
    return (rand() % (nHigh - nLow + 1)) + nLow;
}
string jokeplease(string strInput)
{
    while (strInput.compare("jokeplease") == 0)
    {
        cout << endl;
        // This generates a randomnumber
        int nRandomNumber = GetRandomNumber(1, 10);

        // Every joke has a number which when stated true will show the specified joke
        if(nRandomNumber == 1)
        {
            cout << "Alle barna skrev dikt unntatt Ruben, for han kunne ikke rime." << endl;
        }
        else if(nRandomNumber == 2)
        {
            cout << "Gubben va på kafe og overhørte følgende fra et forelsket par: ”Olga æ e så\n" <<
                    "forelska i dæ at når æ ser på dæ så klar æ næsten ikke å ta te mæ føde.” Gubben\n" <<
                    "syns at det dær va fine ord som han skulle overføre på kjærringa når han kom\n" <<
                    "hjem. Da dæm satt i kjøkkenkroken å kosa sæ med en kopp kaffe, så utbrøut han:\n" <<
                    "”Marta, når æ ser på dæ, så mest æ reint matløsta!”" << endl;
        }
        else if(nRandomNumber == 3)
        {
            cout << "Alle barna så inn i komfyren untatt Knut han så ut." << endl;
        }
        else if(nRandomNumber == 4)
        {
            cout << "En blondine kjører bak en lastebil og gir signal til sjåføren om å stoppe,\n" << 
                    "sjåføren stopper og blondine sier \"du mister lasten din\", sjåføren bare kjører\n" <<
                    "vidre. etter litt gir blondine signal om at han skal stoppe igenn og hun sier\n" << 
                    "\"du mister lasta di!\" sjåføren bryr seg ikke og kjører vidre. etter litt gir\n" << 
                    "blondine signal om at sjåføren skal stoppe og sjåføren sier \"du, det er midt på\n" << 
                    "vinteren, og jeg er ute og strør\"" << endl;
        }
        else if(nRandomNumber == 5)
        {
            cout << "Alle barna gjorde fra seg i potta utenom Hanne, hun gjorde det i spannet." << endl;
        }
        else if(nRandomNumber == 6)
        {
            cout << "Noen plasser sjekker legen hva barnet kommer til å bli ved å stikke hånden\n" <<
                    "sin opp i ræven på ungen. Hvis det skriker blir det en sanger, hvis det sparker\n" <<
                    "vil det bli en fotballspiller og hvis det smiler blir den en homse." << endl;
        }
        else if(nRandomNumber == 7)
        {
            cout << "Norsken, dansken og svensken skulle bade i et badebaseng. Når de kom til\n" << 
                    "badebasenget sa en dame: Det basenget er magisk. Du får et ønske. Da de kom\n" <<
                    "bort til bassenget sa norsken: Jeg ønsker meg masse sjokolade. Så ble bassenget\n" << 
                    "helt fullt med masse sjokolade. Så spiste han det opp. Så sa dansken: jeg ønsker\n" << 
                    "meg masse bananer. Så var det masse bananer i bassenget. Så gikk svensken bort\n" << 
                    "til bassenget, og så sklei han på bananskallet til dansken. Så sa han skitt og\n" << 
                    "da ble bassenget helt fullt med dritt." << endl;
        }
        else if(nRandomNumber == 8)
        {
            cout << "Tre gutter ble sendt til rektor.\n" <<
                    "\"Hva har dere gjort for noe galt da?\" spurte rektor.\n" <<
                    "\"Jeg har kastet stein i vannet\", svarte den ene.\n" <<
                    "…" <<
                    "\"Tja, det er vel ikke så farlig\", sa rektor.\n" <<
                    "\"Men hva har du gjort da?\" sa han til den andre.\n" <<
                    "\"Jeg har også kastet stein i vannet.\"\n" <<
                    "\"Det er vel ikke så farlig. Hva har du gjort da?\" sa han til den tredje.\n" <<
                    "\"Det er jeg som er Stein…\"" << endl;
        }
        else if(nRandomNumber == 9)
        {
            cout << "En brunette og en blondine hopper ut fra et fly. Hvem lander først, og hvorfor?\n" <<
                    "Brunetta lander først, fordi blondina stopper 5 ganger for å spørre om veien." << endl;
        }
        else if(nRandomNumber == 10)
        {
            cout << "Martin: - Gaute er god til å kaste ball.\n" <<
                    "Mor: - Jasså?\n" <<
                    "Martin: - Ja, han traff lillebroren sin i hodet fra 5 meter!" << endl;
        }
        else
        {
            cout << "Error: Unexpected result when retrieving randomnumber!" << endl;
        }
        cout << endl;
        return 0;
    }
    return 0;
}
void OtherStatements(string strInput)
{
    if(strInput.compare("what") == 0||strInput.compare("what?") == 0||strInput.compare("WHAT?") == 0)
    {
        cout << "WHAT?? WHAAAAAAAAAAAAAAT? WHHHAEEEHT? WHAEET WHAET ...";
        Sleep(3000);
        cout << "what?" << endl;
    }
}
string ExitTime(string strInput)
{
    while (strInput.compare("bedtime") == 0||strInput.compare("leave") == 0)
    {
        cout << "Do you want to leave? ";
        string strExitLine;
        getline(cin, strExitLine);
        if (strExitLine.compare("yes") == 0||strExitLine.compare("YES") == 0)
        {
            cout << endl;
            cout << "Whatever! I'm bored!" << endl; 
            cout << "See you later!" << endl;
            exit(1);
        }   
        else if (strExitLine.compare("no") == 0||strExitLine.compare("NO") == 0)
        {
            cout << endl;
            cout << "Well stop whining then!" << endl;
            break;
        }
        else
        {
            cout << endl;
            cout << "I'm a bloddy computer! Speak computer-friendly!" << endl;
        }
    }
    return 0;
}

int main()
{
    cout << "JokePlease v0.01\n" << endl;


        // Taking an input from the user
        string strInput = TakingInput();

        // This prints a random joke when jokeplease is entered
        jokeplease(strInput);

        // Other statements than jokeplease goes here
        OtherStatements(strInput);

        // Here you come when it's time to leave!
        ExitTime(strInput); 

    return 0;
}

エラーなしでプログラムをコンパイルできますが、すぐにconsole-cin(関数内にあります)に何かを書き込むとTakingInput、クラッシュしてエラーが出力されます。

エラーメッセージに出力された式は、、Expression: invalid null pointerおよび...について何かを示していますc:\program ... include\xtring line: 930

少し初心者を助けてください。

4

2 に答える 2

3

関数と関数std::stringの両方を含むオブジェクトを返す必要がある関数でゼロ値 (つまり、整数) を返しています。どちらの関数も一時オブジェクトを返すため、コンパイラはオブジェクトを何らかの値から初期化する (またはデフォルト コンストラクタを使用する) 必要があります。現在のシナリオでは、有効な文字列リテラルへのポインターではなく、基本的にへのポインターで初期化しようとしています(つまり、引数を取るコンストラクターで呼び出され、NULL ポインターを渡しています)。 .jokepleaseExitTimestringNULLstd::stringconst char*

両方の関数を見ると、実際には何も返さないように見えます。つまり、両方を作成する必要がありますvoid

于 2011-08-08T20:08:21.897 に答える
0

への書き込みはできませんcin。入力のみです。
への書き込みに変更しcoutます。

これで問題が解決しない場合は、質問を明確にしてください。

編集1: OPの質問によると、「しかし、すぐに何かを内側のcinに書き込む」ため、エラーがcin.

于 2011-08-08T20:07:28.570 に答える