Hi
Please help me to understand the working of the code below. CODE 1 is working fine. There is an issue with CODE 2 which is just a variation of CODE 1.
1: How does strcat() works?
[code]char temp_str[30] = {0};[\code]
temp_str[] contains 29 zeroes and 30th element would be '\0'. Correct?
Where does strcat() start appending to the destination string from?
2: The variations in CODE 2 are in red. I get the following warning and the code doesn't produce correct result. Also have a look on the OUTPUT below.
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x|
What's wrong?
Please help me with the above queries.
CODE 1
Code:
// read students' record and search for data of a particular student.cpp
// use structure and display all data about the searched student
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int C = 2;
///////////////////////////////////////////////////////////////////////////////
struct Student {int rollno; char firstname[20]; char lastname[20]; string sex; float gpa;};
//////////////////////////////////////////////////////////////////////////////
Student stud[C];
int main()
{
int i; char searchname[30];
for (i=0; i<C; i++)
{
cout << "\n\nEnter student #" << (i+1) << "\'s details below\n\n";
cout << "enter roll no.: "; cin >> stud[i].rollno;
cin.ignore();
cout << "enter first name: "; cin.get(stud[i].firstname, 20);
cin.ignore();
cout << "enter last name: "; cin.get(stud[i].lastname, 20);
cout << "enter sex: "; cin >> stud[i].sex;
cout << "enter GPA: "; cin >> stud[i].gpa;
}
cout << endl;
cin.ignore();
cout << "enter the name to be searched for: "; cin.get(searchname, 30);
// name to be searched for could be, say, Jack Dawson
for (i=0; i<C; i++)
{
char temp_str[30] = {0};
strcat(temp_str, stud[i].firstname);
strcat(temp_str, " ");
strcat(temp_str, stud[i].lastname);
if ( strcmp(temp_str, searchname ) == 0 )
{
cout << "Data for the searched student is shown below\n";
cout << "roll no.: " << stud[i].rollno << endl;
cout << "first name: " << stud[i].firstname << endl;
cout << "last name: " << stud[i].lastname << endl;
cout << "sex: " << stud[i].sex << endl;
cout << "GPA: " << stud[i].gpa << endl;
break;
}
else if ( i == (C-1) )
{
cout << "Sorry, no student exists with such name" << endl;
break;
}
}
system("pause");
return 0;
}
CODE 2
Code:
// read students' record and search for data of a particular student.cpp
// use structure and display all data about the searched student
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int C = 2;
///////////////////////////////////////////////////////////////////////////////
struct Student {int rollno; char firstname[20]; char lastname[20]; string sex; float gpa;};
//////////////////////////////////////////////////////////////////////////////
Student stud[C];
int main()
{
int i; char searchname[30]; char temp_str[30] = {0};
for (i=0; i<C; i++)
{
cout << "\n\nEnter student #" << (i+1) << "\'s details below\n\n";
cout << "enter roll no.: "; cin >> stud[i].rollno;
cin.ignore();
cout << "enter first name: "; cin.get(stud[i].firstname, 20);
cin.ignore();
cout << "enter last name: "; cin.get(stud[i].lastname, 20);
cout << "enter sex: "; cin >> stud[i].sex;
cout << "enter GPA: "; cin >> stud[i].gpa;
}
cout << endl;
cin.ignore();
cout << "enter the name to be searched for: "; cin.get(searchname, 30);
// name to be searched for could be, say, Jack Dawson
for (i=0; i<C; i++)
{
temp_str[30] = {0};
strcat(temp_str, stud[i].firstname);
strcat(temp_str, " ");
strcat(temp_str, stud[i].lastname);
if ( strcmp(temp_str, searchname ) == 0 )
{
cout << "Data for the searched student is shown below\n";
cout << "roll no.: " << stud[i].rollno << endl;
cout << "first name: " << stud[i].firstname << endl;
cout << "last name: " << stud[i].lastname << endl;
cout << "sex: " << stud[i].sex << endl;
cout << "GPA: " << stud[i].gpa << endl;
break;
}
else if ( i == (C-1) )
{
cout << "Sorry, no student exists with such name" << endl;
break;
}
}
system("pause");
return 0;
}
OUTPUT for CODE 2
Code:
Enter student #1's details below
enter roll no.: 1
enter first name: jackson
enter last name: heights
enter sex: male
enter GPA: 6
Enter student #2's details below
enter roll no.: 2
enter first name: jack
enter last name: dawson
enter sex: male
enter GPA: 2
enter the name to be searched for: jack dawson
Sorry, no student exists with such name
Press any key to continue . . .