hej, jag har ett litet problem med mitt program som kommer här nedan, utskrifterna på slutet blir helt fel, nån som kan se nått fel koden? >blir helt fel det blir inget vettigt alls, det blir tecken som jag bara sett i min gammla pascal bok 4) är det någon extra header man måste lägga till för att string ska fungera? Hmm... det verkar som du inte är riktigt haj på namespaces än. jag har just börjat programmera så jag kan inte så mycket, men tack för all hjälp :) Att spara hela meningar är absolut inget problem. Problemet som du syftar på skulle väl kunna vara att läsa in hela meningar. jag vill ha att man skriver tills man trycker på enter, då ska den vara slut. getline(cin, s, '\n');utskriftsfel
<code>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{
struct employeelist {
char firstname[10];
char lastname[10];
char adress[20];
char hiredate[20];
char insurance[20];
};
employeelist record[3];
int i = 0;
do {
cout << "Personal Record nr." << i+1 << endl;
cout << "Firstname of the employee: ";
cin.getline(record[i].firstname,10);
cout << "Lastname of the employee: ";
cin.getline(record[i].lastname,10);
cout << "Adress of the employee: ";
cin.getline(record[i].adress,20);
cout << "When was the employee hired: ";
cin.getline(record[i].hiredate,20);
cout << "Is the employee insured? ";
cin.getline(record[i].insurance,20);
i++;
cout << " " << endl;
}
while ( i < 3 );
system("cls");
cout << "What record do you what to look at? ";
int rec;
do {
cin >> rec;
} while(3>rec && rec>-1);
employeelist temp = record[rec];
cout << "firstname: " << temp.firstname << endl;
cout << "Lastname: " << temp.lastname << endl;
cout << "Adress: " << temp.adress << endl;
cout << "Hire date: " << temp.hiredate << endl;
cout << "Insurance: " << temp.insurance << endl;
system("PAUSE");
return 0;
}
</code>Sv: utskriftsfel
Och vad betyder det?
Om det först står vettiga grejer, men sen skräp, typ:
First Name: Olle2450 684243r2r^^+f¨'
så beror det på att strängen inte blivit avslutad korrekt. Då får du ändra till
cin.getline(record[i].firstname,9);
Annars får du nog förklara vad det är som är fel.
F.ö. så bör du
1) Använda <cstdlib> och inte <stdlib.h>
2) Skriva using namespace inuti main.
3) Sätta structen utanför main.
4) Använda medlemsfunktioner i structen istället för att skriva ut det "manuellt".
5) Använda string istället.Sv: utskriftsfel
4) Använda medlemsfunktioner i structen istället för att skriva ut det "manuellt".
5) Använda string istället.
kan du utveckla detta lite mer?Sv: utskriftsfel
Du skriver C++, det är ju uppenbart.
Därför så bör du inte använda dig av c-strängar, dvs. char * (eller char [], det är samma sak), utan istället klassen "string".
Du skriver alltså inte
char firstname[10];
utan
string firstname;
sen kan du köra med t.ex. cin >> firstname;
De är lättare att hantera, och ofta effektivare än C-strängar.
5) I C++ infördes medlemsfunktioner för strukturer och klasser (som också infördes i samma veva).
Det innebär att du kan skriva
struct Employee {
string firstname;
string lastname;
//...
void Print() {
std::cout << "First name: " << firstname << endl << "Last name: " << lastname; //...
}
} ;
Och sen använda det så här:
Employee p;
p.firstname="Olle"
//...
p.Print();
(Detta är inte hela historien, men jag orkar inte skriva allt sånt nu...)Sv: utskriftsfel
för mig står det bara "7 C:\Program\Dev-Cpp\h4.1.cpp - 'string' is used as a type, but is not defined"Sv: utskriftsfel
Om du har gjort enligt mitt råd, och lagt structen utanför main, så får du skriva
std::string. (eller "using std::string" i structen, osäker på om det funkar).
Annars KAN du skriva using namespace std; längst upp, men det är inte speciellt bra.Sv: utskriftsfel
Sv: utskriftsfel
Hur vill du ha dem, radvis, ett visst antal tecken, något annat slut?Sv: utskriftsfel
Sv: utskriftsfel
Tror att det finns lite inställningar att göra i cin också, lite osäker på det...