Hi Guys/ girls.

I have written a small program for uni, and it involves the user inputting a message that is saved into a string. The only problem is that whenever i use a space within the message the whole program crashes.

Can anyone help, i have given the code below.

Many Thanks

#include <iostream>
#include <string>
using namespace std;

struct messages
{
    string message;
    int hours;
    int minutes;
    int seconds;

};

int main()
{
    int size;
    string text;
    int hrs;
    int mins;
    int secs;


    struct messages* array;



    cout << "How many messages do you want to enter? ";
    cin >> size;
    cout << endl;

    array = new messages[size];

    for (int i = 0; i < size; i++)
    {
        cout << "Message " << i+1 << ": ";
        cin >> text;

        array[i].message = text;
        cout << endl;

        cout << "Enter current time in Hours, Minutes & Seconds : " ;
        cin >> hrs >> mins >> secs;
        cout << endl << endl;

        array[i].hours = hrs;
        array[i].minutes = mins;
        array[i].seconds = secs;


}


    cout << "Messages Recieved  were: "<<endl;
    cout << endl;

    for (int j=0; j < size; j++)
    {
        if( array[j].hours > 24 || array[j].minutes > 60 ||array[j].seconds > 60)
        {
            cout << "Message: " << array[j].message << " "<<endl;
            cout << "The above message was posted at an invalid time" << endl;
            cout << endl;
        }
        else

        {
        cout << "Message: " << array[j].message << " "<<endl;
        cout << " This message was posted at : ";
        cout << array[j].hours << ":" << array[j].minutes << ":"<<array[j].seconds <<endl; 
        cout << endl;
        }
    }

    return 0;
}
cout << "Message " << i+1 << ": ";
cin >> text;          // problem line

array[i].message = text;
cout << endl;

cout << "Enter current time in Hours, Minutes & Seconds : " ;
cin >> hrs >> mins >> secs;

Your problem is in line 2 above. cin only reads to the space, so if I type in:

Howard Jones

"Howard" will be stored in the variable called "text". "Jones" is left in the input buffer. When you get to line 8, cin will attempt to assign "Jones" to the variable "hrs", which wants an integer, so the program crashes. If you want "Howard Jones" to be stored in the variable "text", don't use "cin" as you did. Instead, use "getline".
http://www.cplusplus.com/reference/string/getline.html

The above link has an example explaining how to read in multiple words into a string from cin using "getline".

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.