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

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;

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

array.message = text;
cout << endl;

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

array.hours = hrs;
array.minutes = mins;
array.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;
}

See my other post for an explanation.
http://www.daniweb.com/forums/thread112419.html
In the example from this link:
http://www.cplusplus.com/reference/string/getline.html

// getline with strings
#include <iostream>
#include <string>
using namespace std;

int main () {
  string str;
  cout << "Please enter full name: ";
  getline (cin,str);   // this is the relevant line
  cout << "Thank you, " << str << ".\n";
}

line 9 above corresponds to line 2 in your code below:

cout << "Message " << i+1 << ": ";
cin >> text;  // corresponds to line 9 in example above

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

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

Try changing line 2 in your code to:

getline (cin, text);
int main()
{
  // ...
  cout << "How many messages do you want to enter? ";
  cin >> size;
  array = new messages[size];

  for (int i = 0; i < size; i++)
  {
    cout << "Message " << i+1 << ": ";
    //cin >> text;
    getline( cin >> ws, text ) ;
    array[i].message = text;

    cout << "Enter current time in Hours, Minutes & Seconds : " ;
    cin >> ws >> hrs >> mins >> secs;
    array[i].hours = hrs;
    // ...
   }
   // ...
}
This article has been dead for over six months. Start a new discussion instead.