У меня какая-то ошибка утверждения в моей маленькой программе - PullRequest
1 голос
/ 09 августа 2011

У меня есть своего рода ошибка утверждения в этой программе, и, к сожалению, я довольно новичок в 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.

Пожалуйста, помогите мне, маленький новичок.

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Вы возвращаете нулевое значение (т. Е. Целое число) в функции, которая должна возвращать объект std::string с вашими функциями jokeplease и ExitTime.Поскольку обе функции возвращают временный объект string, компилятор должен инициализировать объект с некоторого значения (или использовать конструктор по умолчанию).В вашем текущем сценарии вы пытаетесь инициализировать его с помощью в основном указателя на NULL, а не указателя на действительный строковый литерал (т. Е. std::string вызывается с помощью конструктора, который принимает аргумент const char*, и выпередаете ему NULL-указатель).

Когда вы смотрите на обе функции, они на самом деле не выглядят так, как будто они должны что-то возвращать, т. е. вы должны сделать обе из них void.

0 голосов
/ 09 августа 2011

Вы не можете писать на cin. Это только вход.
Изменить на запись на cout.

Если это не помогло решить проблему, уточните вопрос.

Редактировать 1: Согласно вопросу О.П., «но я сразу что-то пишу в cin внутри», таким образом, ошибка записывается в cin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...