0

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

Edited by Dani: Formatting fixed

2
Contributors
1
Reply
4
Views
9 Years
Discussion Span
Last Post by VernonDozier
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".

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.