Permalänk
Medlem

Struct array C++

Hej,

Jag läser programmering 1. Vi ska nu göra en lista med struct arrays, jag har läst kapitlet, googlat och jag tycker inte att jag fått något ur det, kontra vad uppgiften går ut på? Jag förstår inte vart jag ska börja, eller riktigt vart man kan finna funktionerna i C++- T.ex., är en sak att vi ska ha mer än funktionen int main(), hur kan jag hitta vad mer det finns? Är det google som gäller?

Alternativen vi hade var att göra en lagerlista, adressbok etc. Så till min fråga, finns det något sätt att randomisera för en adresslista? Att skriva in en del parametrar men till exempel sök person, och om man väljer bokstaven A, så får man upp t.ex. 10 personer, med namn, adress, telefonnummer, eller måste det hand knappas in i så fall? Jag har läst och tiden börjar rinna iväg, är det någon som har ett pedagogiskt, enklare tips för hur jag i alla fall ska starta? För nu är jag helt låst.

Tacksam för all hjälp.

Permalänk
Medlem

Jag har inte kodat C++ sedan 90-talet, så tipsen är mer generella komma-igång-med-programmerings-tips.

Skrivet av Rikurt:

Jag har läst och tiden börjar rinna iväg, är det någon som har ett pedagogiskt, enklare tips för hur jag i alla fall ska starta? För nu är jag helt låst.

Har du fått igång en utvecklingsmiljö där du kan köra enklare program i stil med "Hello world" och enklare beräkningar? Bra.

Om du vill komma fort fram är nästa steg att lära dig stega programmet i en debugger så att du kan inspektera värden på variabler (och kanske till och med ändra dem från utvecklingsmiljön) medan programmet körs.

Skrivet av Rikurt:

Jag förstår inte vart jag ska börja, eller riktigt vart man kan finna funktionerna i C++- T.ex., är en sak att vi ska ha mer än funktionen int main(), hur kan jag hitta vad mer det finns? Är det google som gäller?

Kurslitteraturen ger dig förhoppningsvis tips på vilka koncept du ska fokusera på först.

Funktioner är något du tänker ut och skapar själv, utifrån problemet du vill lösa. I C++, till skillnad från C, så jobbar man mest objektorienterat, dvs med klasser som innehåller metoder. Lösa funktioner som main() är ett undantag. Men det är möjligt att pedagogiken i din kurs börjar enkelt och helt enkelt lär ut C i början, snarare än normal C++, eftersom det är krångligare.

Standardbiblioteket är färdiga klasser (och därmed metoder/funktioner) som har standardiserats av ISO. Dessa är byggblock som gör att du inte behöver uppfinna allt själv. Standarden själv kostar pengar och är inte läsbar för nybörjare. Här finns rekommendationer på hur man hittar webbresurser som dokumenterar standardbiblioteken.

Men ja, att googla på det du ser i kurslitteraturen bör fungera bra.

Skrivet av Rikurt:

Så till min fråga, finns det något sätt att randomisera för en adresslista? Att skriva in en del parametrar men till exempel sök person, och om man väljer bokstaven A, så får man upp t.ex. 10 personer, med namn, adress, telefonnummer, eller måste det hand knappas in i så fall?

Det enklaste är att hårdkoda variabler av struct-typ direkt i din kod. Då har du data att jobba med som finns kvar även nästa gång du startar programmet.

Beroende på hur denna och nästa uppgift faktiskt ser ut så bör du förbereda dig på att programmet ska kunna utökas med att ladda och spara data till fil i stället.

Ja, det går naturligtvis att slumpa fram data. Men det är antagligen inte vad du vill göra i det här läget. Det är betydligt enklare att felsöka ett program som fungerar likadant varje gång.

Skrivet av Rikurt:

Jag läser programmering 1. Vi ska nu göra en lista med struct arrays, jag har läst kapitlet, googlat och jag tycker inte att jag fått något ur det, kontra vad uppgiften går ut på?

[...]

Alternativen vi hade var att göra en lagerlista, adressbok etc.

Om du faktiskt hade skrivit uppgiften så hade du kunnat få bättre tips. Jag tippar på att du ska börja ungefär så här:

1) Skapa en struct-typ, se Named Structures här.
2) Skapa ett gäng hårdkodade instanser av struct-typen (variabler), exempel finns på samma sida som ovan.
3) Skapa en variabel med en vanlig C-stil-array och lägga in dina struct-variabler i denna. Sedan kan du skriva en loop för att skriva ut alla poster i arrayen. Alternativt skapar du en C++-array, beroende på hur uppgiften är formulerad.

Hur du ska gå vidare därifrån beror på hur uppgiften är formulerad. Eller om du nu har någon form av problembaserad inlärning, hur du väljer att formulera uppgiften.

Hela grejen med programmering är att kunna ta till sig ett koncept i taget och sedan pussla ihop dessa för att lösa ett specifikt problem. Du måste lära dig båda dessa steg och det finns egentligen bara ett sätt: hårt jobb och öva.

Exemplen länkade ovan visar ofta hur du ska hantera int:ar (heltal). I din uppgift måste du hantera struct:ar i stället, där är ett exempel på hur du behöver kunna kombinera olika koncept till en problemlösning.

Till sist: struct är ett C-koncept, i C++ använder man oftast klasser. Men eftersom C++ är bakåtkompatibelt med C så går det även att använda struct. Jag fokuserade på struct ovan eftersom du nämnde det. Jag kan ju bara gissa vad som ingår i din kurs.

Permalänk
Medlem

Gällande att spara saker i koden eller mata in för hand, vad säger uppgiften att du ska göra? När det gäller såna här uppgifter så är det oftast bäst att följa instruktionerna så gott det går och undvika att krångla till det i onödan. Att lära sig läsa och verkligen förstå instruktioner är också en del av att lära sig programmera.

Skrivet av KAD:

I C++, till skillnad från C, så jobbar man mest objektorienterat, dvs med klasser som innehåller metoder. Lösa funktioner som main() är ett undantag.

Lösa funktioner är faktiskt väldigt vanliga även i C++, att stoppa allt i klasser är mer av en C#/Java grej.

Skrivet av KAD:

Till sist: struct är ett C-koncept, i C++ använder man oftast klasser. Men eftersom C++ är bakåtkompatibelt med C så går det även att använda struct. Jag fokuserade på struct ovan eftersom du nämnde det. Jag kan ju bara gissa vad som ingår i din kurs.

Struct används en hel del i C++ också. Oftast används class för typer som har metoder och struct när man bara vill packa ihop data i en struktur, men rent tekniskt är den enda skillnaden att åtkomstnivån som standard är public i en struct och private i en class.

Permalänk
Medlem

Hej,

Tack för hjälpen. Jag ska försöka läsa mig smartare, lite tidsbrist och lite osäker på vad och vart, nedan är instruktionerna för uppgiften:

"Skapa ett enkelt registerprogram med hjälp av ett fält (array) med element av typen struct. T.ex. ett lagerhållningsprogram, en adressbok, en förteckning över en skivsamling. Alla ingående variabler i structen bör inte vara av samma typ. Programmet ska ha ett textbaserat gränssnitt där man via en meny ska kunna välja bland några olika alternativ. Minimum är att man ska kunna skriva ut en lista över alla element samt söka efter ett element. Programmet ska upprepas tills dess användaren väljer att avsluta det. Man ska alltså alltid komma tillbaka menyn efter att ett alternativ har utförts. En meny för ett lagerhållningsprogram skulle kunna se ut så här:1. Skriv ut lagerlista2. Sök artikel3. Redigera artikel4. Avsluta programmetKoden ska innehålla minst en funktion(utöver main), vara kommenterad och korrekt indenterad. Läs mer om bedömning nedan.Skicka in källkodsfilen som du döpt till <ditt_namn>.cpp"

Det jag har svårast för är att få till en meny, hur jag ska göra smidigast, typ antal personer som ska finnas, då du ska kunna välja i någon form av lista, vart jag ska placera struct, vilka variabler den ska ha, funktioner, hur jag ev får in och var en for.-loop. Sitter helt fast just nu, detta är så långt jag kommit:

#include<iostream>
using namespace std;
{
struct person;
int namn;
string adress;
int ålder;
}
int main()
{

Permalänk
Medlem

"Programmet ska upprepas tills dess användaren väljer att avsluta det" det här betyder att man har ett oändligt while(true) loop där du gör ett designval på hur du ska framställa det som krävs på instruktionerna. Man kan ha ett antal print-satser med allt det där 1,2,3,4... och sedan önska användaren att göra ett val. Valet kan ju representeras som int och man kan läsa in valet på olika sätt. getchar() eller scanf fungerar på C men jag vet inte hur det är på C++. Då blir det en lång if, if-else, if-else, ... inne i loopen där den sista if-elsen är else if(input==5) break; som då betyder att man hoppar ur loopen.

Det står även hur du ska representera data. Det ska finnas en array och dess element ska ha typen struct T. <struct T> arr[10] kan då innehålla 10 element av typen struct T på C. Du kan t.ex. skapa en funktion som tar in ett element (arr[0] t.ex.) och parametrarna som ska användas till att redigera. Därefter kan funktionen returnera struct T och arrayen kan uppdateras genom t.ex. arr[0] = edit_element(struct T arr[0], int namn...)

Att skriva ut kan göras med for(int i = 0; i < length(arr); i++) print(lämpliga fält...) Om sök funktionen ska söka efter int namn så kan man göra exakt samma sak men istället för print så kan man skriva if(sökt_namn == arr[i].namn) return true... Att söka efter en sträng är inte lika enkelt och kan inte göras med ==, man behöver då t.ex. strcmp eller något liknande.

Visa signatur

| Ryzen 3800XT | Corsair LPX 32GB | B550 Aorus Elite v2 | GTX 970 | Samsung 970 Evo | CM Masterbox 520 | RM750x | Windows 7

| Ryzen 2700 | Corsair LPX 16GB | Prime B450-Plus | GT 1030 | Samsung 970 Evo | Kolink Observatory | RM750x | EndeavourOS

| JDS Labs Atom | Khadas Tone Board | Fostex TX-X00 & HIFIMAN HE4XX |

Permalänk
Medlem
Skrivet av Rikurt:

Det jag har svårast för är att få till en meny, hur jag ska göra smidigast, typ antal personer som ska finnas, då du ska kunna välja i någon form av lista, vart jag ska placera struct, vilka variabler den ska ha, funktioner, hur jag ev får in och var en for.-loop. Sitter helt fast just nu, detta är så långt jag kommit:

Försök inte göra allting samtidigt, bryt ner problemet i mindre delar och lös det steg för steg istället. Eftersom du inte verkar veta hur struct fungerar så börja med ett litet program som t.ex. bara definierar en struct, skapar en instans av den med fördefinierade värden och skriver ut den. Sen kan du lägga till så att användaren får mata in värdena istället, o.s.v.

Om du inte har någon bra kursliteratur så är ett tips att kika på Learn C++, det är en av de bästa sidorna att lära sig modern C++ från.

Permalänk
Medlem

Hej alla, nu har jag läst, googlat, och fan och hans moster sålt min själ och lagt timmar, så min hjärndimma är total.
Jag fick till en relativt simpel adressbok, med olika val från menyn etc. sen ville jag samla lite pluspoäng och kunna lägga till kontakter. Nu får jag upp följande felkoder:
expected ´while´
2157 too big for character
´{´: no matching token

Nedan är koden i helhet, och jag har stirrat till mig migrän för att kunna hitta felet:

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

struct Contact {
std::string name;
std::string number;
std::string address;
};
void printContact(const Contact& contact) { //Menyvalen ska stå här nedan
std::cout << "Namn: " << contact.name << std::endl;

std::cout << "Nummer: " << contact.number << std::endl;

std::cout << "Adress: " << contact.address << std::endl;
}
int main() {
{

Contact addressBook[10];
//Lägg in grunddatan i adressboken, namn, nummer, adress nedan
addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" };
addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" };
addressBook[2] = { "Josefin", "0721234765", "Pilgatan 12, Stockholm" };
addressBook[3] = { "Rikard", "0721237654", "R\x86dsvägen 11, Huddinge" };
addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" };
addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" };
addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" };
addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" };
addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" };
addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" };

int choice;
do { //Här ska menyn vara för de val som jag vill ha.
std::cout << "Meny" << std::endl;
std::cout << "1.Visa alla kontakter" << std::endl;
std::cout << "2. Vx84lj kontakt" << std::endl;
std::cout << "3. L\x84gg till ny kontakt";
std::cout << "4. Avsluta" << std::endl;
std::cout << "V\x84lj ditt val: ";
std::cin >> choice;

switch (choice) {
case 1:
//Visa alla kontakter
for (int i = 0; i < 10; ++i) {
printContact(addressBook[i]);
std::cout << std::endl;
}
break;

case 2:
//Välj kontakt
int contactIndex;
std::cout << "Fyll i kontaktinformation(0-9): ";
std::cin >> contactIndex;
if (contactIndex >= 0 && contactIndex < 10) {

printContact(addressBook[contactIndex]);
}
else {
std::cout << "Ogiltigt, V\x84nligen f\x94rs\x94k igen." << std::endl;
}
break;

case 3:
//Lägg till ny kontakt
for (int i = 0; i < 10; ++i) {
if (addressBook[i].name.empty()) {
std::cout << "Skriv namn: ";
std::cin >> addressBook[i].name;
std::cout << "Skriv nummer: ";
std::cin >> addressBook[i].number;
std::cout << "Skriv adress: ";
std::cin >> addressBook[i].address;
std::cin.ignore();//Rensar inputen
std::getline(std::cin, addressBook[i].address);
std::cout << "Kontakt tillagd." << std::endl;
break;

}
}
break;

case 4:
std::cout << "Avslutar program. Ha en fin dag." << std::endl;
break;

default:
std::cout << "Ogiltigt val. V\x84nligen f\x94rs\x94k igen" << std::endl;

} while (choice != 4);

return 0;
}

Permalänk
Medlem
Skrivet av Rikurt:

Hej alla, nu har jag läst, googlat, och fan och hans moster sålt min själ och lagt timmar, så min hjärndimma är total.
Jag fick till en relativt simpel adressbok, med olika val från menyn etc. sen ville jag samla lite pluspoäng och kunna lägga till kontakter. Nu får jag upp följande felkoder:
expected ´while´
2157 too big for character
´{´: no matching token

Nedan är koden i helhet, och jag har stirrat till mig migrän för att kunna hitta felet:

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

struct Contact {
std::string name;
std::string number;
std::string address;
};
void printContact(const Contact& contact) { //Menyvalen ska stå här nedan
std::cout << "Namn: " << contact.name << std::endl;

std::cout << "Nummer: " << contact.number << std::endl;

std::cout << "Adress: " << contact.address << std::endl;
}
int main() {
{

Contact addressBook[10];
//Lägg in grunddatan i adressboken, namn, nummer, adress nedan
addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" };
addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" };
addressBook[2] = { "Josefin", "0721234765", "Pilgatan 12, Stockholm" };
addressBook[3] = { "Rikard", "0721237654", "R\x86dsvägen 11, Huddinge" };
addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" };
addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" };
addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" };
addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" };
addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" };
addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" };

int choice;
do { //Här ska menyn vara för de val som jag vill ha.
std::cout << "Meny" << std::endl;
std::cout << "1.Visa alla kontakter" << std::endl;
std::cout << "2. Vx84lj kontakt" << std::endl;
std::cout << "3. L\x84gg till ny kontakt";
std::cout << "4. Avsluta" << std::endl;
std::cout << "V\x84lj ditt val: ";
std::cin >> choice;

switch (choice) {
case 1:
//Visa alla kontakter
for (int i = 0; i < 10; ++i) {
printContact(addressBook[i]);
std::cout << std::endl;
}
break;

case 2:
//Välj kontakt
int contactIndex;
std::cout << "Fyll i kontaktinformation(0-9): ";
std::cin >> contactIndex;
if (contactIndex >= 0 && contactIndex < 10) {

printContact(addressBook[contactIndex]);
}
else {
std::cout << "Ogiltigt, V\x84nligen f\x94rs\x94k igen." << std::endl;
}
break;

case 3:
//Lägg till ny kontakt
for (int i = 0; i < 10; ++i) {
if (addressBook[i].name.empty()) {
std::cout << "Skriv namn: ";
std::cin >> addressBook[i].name;
std::cout << "Skriv nummer: ";
std::cin >> addressBook[i].number;
std::cout << "Skriv adress: ";
std::cin >> addressBook[i].address;
std::cin.ignore();//Rensar inputen
std::getline(std::cin, addressBook[i].address);
std::cout << "Kontakt tillagd." << std::endl;
break;

}
}
break;

case 4:
std::cout << "Avslutar program. Ha en fin dag." << std::endl;
break;

default:
std::cout << "Ogiltigt val. V\x84nligen f\x94rs\x94k igen" << std::endl;

} while (choice != 4);

return 0;
}

När du klistrar in kod, använd [code] KOD [/code] runt koden för att den ö.h.t. ska vara läsbar

Felmeddelandet säger att du inte har en matchande } för en {.

Du avslutar inte din do-while-loop, d.v.s. du saknar en slutmåsvinge ( } )
Du har även av någon anledning en extra måsvinge ( { ) i början av din main-funktion

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

Om man tar bort det mesta av koden och bara lämnar kontrollstrukturerna så blir det:

int main() { { do { switch (choice) { } while (choice != 4); return 0; }

Permalänk
Medlem

Hmm, har ändrat, fattar att många saker har med måsvingarna att göra kanske bara tycker det är svårt att hitta. får även upp att just denna rad är too big for character:

addressBook[3] = { "Rikard", "0721237654", "R\x86dsvägen 11, Huddinge" };

Fast den är skriven på exakt samma sätt som övriga namn/adresser/inputs så är just den den varnar för.

Permalänk
Medlem
Skrivet av Rikurt:

Hmm, har ändrat, fattar att många saker har med måsvingarna att göra kanske bara tycker det är svårt att hitta. får även upp att just denna rad är too big for character:

addressBook[3] = { "Rikard", "0721237654", "R\x86dsvägen 11, Huddinge" };

Fast den är skriven på exakt samma sätt som övriga namn/adresser/inputs så är just den den varnar för.

Möjligtvis att det blir galet p.g.a. \x86d där d tolkas som en del av hex-strängen.

Prova ange adressen enligt följande istället;
addressBook[3] = { "Rikard", "0721237654", std::string("R\x86") + std::string("dsvägen 11, Huddinge") };

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem
Skrivet av Rikurt:

får även upp att just denna rad är too big for character:

addressBook[3] = { "Rikard", "0721237654", "R\x86dsvägen 11, Huddinge" };

Fast den är skriven på exakt samma sätt som övriga namn/adresser/inputs så är just den den varnar för.

En std::string använder char för att lagra karaktärerna, som normalt kan ha värden i spannet [-128, 127]. Det hexadecimala värdet 86 = 8*16+6 = 134, så det är större än vad en char kan lagra.

Om du vill använda svenska tecken så skulle jag rekommendera att bara använda dem som vanligt och se till att filen är sparad som UTF-8, och sen hoppas på det bästa.

Permalänk
Medlem

Fattar, jag ändrade alla tecken, försökte till och med ta hjälp av chatGPT för att finna exakta felen, men de va föga hjälpbart.

#include<iostream> #include<string> using namespace std; struct Contact { string name; string number; string address; }; void printContact(const Contact& contact) { //Menyvalen ska stå här nedan cout << "Namn: " << contact.name << endl; cout << "Nummer: " << contact.number << endl; cout << "Adress: " << contact.address << endl; } int main() { Contact addressBook[10]; //Lägg in grunddatan i adressboken, namn, nummer, adress nedan addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" }; addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" }; addressBook[2] = { "Josefin", "0721234765", "Pilgatan 12, Stockholm" }; addressBook[3] = { "Rikard", "0721237654", "Pilgatan 17, Huddinge" }; addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" }; addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" }; addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" }; addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" }; addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" }; addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" }; int choice; do { //Här ska menyn vara för de val som jag vill ha. cout << "Välkommen till adressboken" << endl; cout << "1.Visa alla kontakter" << endl; cout << "2. Sök efter kontaktt" << endl; cout << "3. Läggg till kontakt"; cout << "4. Avsluta" << endl; cout << "Vänligen välj ett alternativ(1-4): "; cin >> choice; switch (choice) { case 1: //Visa alla kontakter for (int i = 0; i < 10; ++i) { cout << "Kontakt" << i + 1 << endl; printContact(addressBook[i]); cout << endl; } break; case 2: //Välj kontakt int contactIndex; cout << "Fyll i kontaktinformation(0-9): "; cin >> contactIndex; if (contactIndex >= 0 && contactIndex < 10) { printContact(addressBook[contactIndex]); } else { cout << "Ogiltigt, V\x84nligen f\x94rs\x94k igen." << std::endl; } break; case 3: //Lägg till ny kontakt for (int i = 0; i < 10; ++i) { if (addressBook[i].name.empty()) { cout << "Skriv namn: "; cin >> addressBook[i].name; cout << "Skriv nummer: "; cin >> addressBook[i].number; cout << "Skriv adress: "; cin >> addressBook[i].address; cin.ignore();//Rensar inputen getline(std::cin, addressBook[i].address); cout << "Kontakt tillagd." << std::endl; break; case 4: cout << "Programmet avslutas. Hej då!" << endl; break; default: cout << "Felaktigt val, vänligen försök igen" << endl; } }while (choice != 4); return 0; }

Ser om koden ser bättre ut nu iaf, behöver nog eventuellt ta en paus haha, suttit med detta i flera timmar, så allt blir bara ett enda mos just nu, är säkert lättare löst än jag tror

Permalänk
Medlem

@Rikurt: Försöka att vara väldigt noga med hur du indenterar koden, så att t.ex. varje par av måsvingar matchar varandra. Varför är t.ex. den sista måsvingen i koden indenterad två nivåer när den ska avsluta main?

En bra vana är att alltid avsluta { med } omedelbart (en del utvecklingsmiljöer gör det åt dig), innan du börjar skriva resten av koden inne i blocket. Annars blir det lätt fel när du har en massa kod mellan och ska försöka matcha } mot {, om du ens kommer ihåg att göra det (du har t.ex. missat några } i din nuvarande kod).

Permalänk
Medlem

Hej alla, vet att jag skrivit mycket, jag fick min kod körbar, och la till en sökfunktion efter lite googlande, nu får jag upp 1 felmeddelande, försökt copilot på denna då jag har deadline idag och suttit flera timmar med detta program, är det någon vass som bara enkelt kan säga vad jag behöver göra för att få programmet körbart? Just nu klagar den på no matching token, och jag har varit dålig på det tidigare, men stirrat mig blind, verkligen blind. Och är lite desperat just nu.

#include <iostream> #include <string> using namespace std; struct Contact { string name; string number; string address; }; void printContact(const Contact& contact) { cout << "Namn: " << contact.name << endl; cout << "Nummer: " << contact.number << endl; cout << "Adress: " << contact.address << endl; } int main() { const int maxContacts = 10; Contact addressBook[10]; // Lägg in grunddatan i adressboken, namn, nummer, adress nedan addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" }; addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" }; addressBook[2] = { "Josefin", "0721234765", "Fridhemsgatan 13, Stockholm" }; addressBook[3] = { "Rikard", "0721237654", "Pilgatan 17, Huddinge" }; addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" }; addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" }; addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" }; addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" }; addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" }; addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" }; int choice; do { cout << "Välkommen till adressboken" << endl; cout << "1. Visa alla kontakter" << endl; cout << "2. Sök efter kontakt" << endl; cout << "3. Lägg till kontakt" << endl; cout << "4. Avsluta" << endl; cout << "Vänligen välj ett alternativ (1-4): "; cin >> choice; switch (choice) { case 1: // Visa alla kontakter for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty()) { cout << "Kontakt " << i + 1 << endl; printContact(addressBook[i]); cout << endl; } } break; case 2: // Sök efter kontakt string searchTerm; cout << "Skriv in sökterm (namn, nummer eller adress): "; cin.ignore(); // Rensar inputen getline(cin, searchTerm); bool found = false; for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty() && (addressBook[i].name.find(searchTerm) != string::npos || addressBook[i].number.find(searchTerm) != string::npos || addressBook[i].address.find(searchTerm) != string::npos)) { printContact(addressBook[i]); found = true; } } if (!found) { cout << "Ingen matchande kontakt hittades." << endl; } break; case 3: // Lägg till ny kontakt if (addressBook[9].name.empty()) { cout << "Ange namn: "; cin.ignore(); // Rensar inputen getline(cin, addressBook[9].name); cout << "Ange nummer: "; getline(cin, addressBook[9].number); cout << "Ange adress: "; getline(cin, addressBook[9].address); cout << "Kontakt tillagd!" << endl; } else { cout << "Adressboken är full. Du kan inte lägga till fler kontakter." << endl; } break; case 4: cout << "Programmet avslutas. Hej då!" << endl; break; default: cout << "Felaktigt val, vänligen försök igen." << endl; } while (choice != 4); cout << "Programmet avslutas. Hej då!" << endl; return 0; }

Tack som fan på förhand.

Permalänk
Medlem
Skrivet av Rikurt:

Hej alla, vet att jag skrivit mycket, jag fick min kod körbar, och la till en sökfunktion efter lite googlande, nu får jag upp 1 felmeddelande, försökt copilot på denna då jag har deadline idag och suttit flera timmar med detta program, är det någon vass som bara enkelt kan säga vad jag behöver göra för att få programmet körbart? Just nu klagar den på no matching token, och jag har varit dålig på det tidigare, men stirrat mig blind, verkligen blind. Och är lite desperat just nu.

#include <iostream> #include <string> using namespace std; struct Contact { string name; string number; string address; }; void printContact(const Contact& contact) { cout << "Namn: " << contact.name << endl; cout << "Nummer: " << contact.number << endl; cout << "Adress: " << contact.address << endl; } int main() { const int maxContacts = 10; Contact addressBook[10]; // Lägg in grunddatan i adressboken, namn, nummer, adress nedan addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" }; addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" }; addressBook[2] = { "Josefin", "0721234765", "Fridhemsgatan 13, Stockholm" }; addressBook[3] = { "Rikard", "0721237654", "Pilgatan 17, Huddinge" }; addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" }; addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" }; addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" }; addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" }; addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" }; addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" }; int choice; do { cout << "Välkommen till adressboken" << endl; cout << "1. Visa alla kontakter" << endl; cout << "2. Sök efter kontakt" << endl; cout << "3. Lägg till kontakt" << endl; cout << "4. Avsluta" << endl; cout << "Vänligen välj ett alternativ (1-4): "; cin >> choice; switch (choice) { case 1: // Visa alla kontakter for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty()) { cout << "Kontakt " << i + 1 << endl; printContact(addressBook[i]); cout << endl; } } break; case 2: // Sök efter kontakt string searchTerm; cout << "Skriv in sökterm (namn, nummer eller adress): "; cin.ignore(); // Rensar inputen getline(cin, searchTerm); bool found = false; for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty() && (addressBook[i].name.find(searchTerm) != string::npos || addressBook[i].number.find(searchTerm) != string::npos || addressBook[i].address.find(searchTerm) != string::npos)) { printContact(addressBook[i]); found = true; } } if (!found) { cout << "Ingen matchande kontakt hittades." << endl; } break; case 3: // Lägg till ny kontakt if (addressBook[9].name.empty()) { cout << "Ange namn: "; cin.ignore(); // Rensar inputen getline(cin, addressBook[9].name); cout << "Ange nummer: "; getline(cin, addressBook[9].number); cout << "Ange adress: "; getline(cin, addressBook[9].address); cout << "Kontakt tillagd!" << endl; } else { cout << "Adressboken är full. Du kan inte lägga till fler kontakter." << endl; } break; case 4: cout << "Programmet avslutas. Hej då!" << endl; break; default: cout << "Felaktigt val, vänligen försök igen." << endl; } while (choice != 4); cout << "Programmet avslutas. Hej då!" << endl; return 0; }

Tack som fan på förhand.

Vilken editor/IDE skriver du koden i? Svaret från @perost ovanför ditt inlägg förklarar vad som är fel - även i din nya version.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Skrivet av Rikurt:

Hej alla, vet att jag skrivit mycket, jag fick min kod körbar, och la till en sökfunktion efter lite googlande, nu får jag upp 1 felmeddelande, försökt copilot på denna då jag har deadline idag och suttit flera timmar med detta program, är det någon vass som bara enkelt kan säga vad jag behöver göra för att få programmet körbart? Just nu klagar den på no matching token, och jag har varit dålig på det tidigare, men stirrat mig blind, verkligen blind. Och är lite desperat just nu.

#include <iostream> #include <string> using namespace std; struct Contact { string name; string number; string address; }; void printContact(const Contact& contact) { cout << "Namn: " << contact.name << endl; cout << "Nummer: " << contact.number << endl; cout << "Adress: " << contact.address << endl; } int main() { const int maxContacts = 10; Contact addressBook[10]; // Lägg in grunddatan i adressboken, namn, nummer, adress nedan addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" }; addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" }; addressBook[2] = { "Josefin", "0721234765", "Fridhemsgatan 13, Stockholm" }; addressBook[3] = { "Rikard", "0721237654", "Pilgatan 17, Huddinge" }; addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" }; addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" }; addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" }; addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" }; addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" }; addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" }; int choice; do { cout << "Välkommen till adressboken" << endl; cout << "1. Visa alla kontakter" << endl; cout << "2. Sök efter kontakt" << endl; cout << "3. Lägg till kontakt" << endl; cout << "4. Avsluta" << endl; cout << "Vänligen välj ett alternativ (1-4): "; cin >> choice; switch (choice) { case 1: // Visa alla kontakter for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty()) { cout << "Kontakt " << i + 1 << endl; printContact(addressBook[i]); cout << endl; } } break; case 2: // Sök efter kontakt string searchTerm; cout << "Skriv in sökterm (namn, nummer eller adress): "; cin.ignore(); // Rensar inputen getline(cin, searchTerm); bool found = false; for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty() && (addressBook[i].name.find(searchTerm) != string::npos || addressBook[i].number.find(searchTerm) != string::npos || addressBook[i].address.find(searchTerm) != string::npos)) { printContact(addressBook[i]); found = true; } } if (!found) { cout << "Ingen matchande kontakt hittades." << endl; } break; case 3: // Lägg till ny kontakt if (addressBook[9].name.empty()) { cout << "Ange namn: "; cin.ignore(); // Rensar inputen getline(cin, addressBook[9].name); cout << "Ange nummer: "; getline(cin, addressBook[9].number); cout << "Ange adress: "; getline(cin, addressBook[9].address); cout << "Kontakt tillagd!" << endl; } else { cout << "Adressboken är full. Du kan inte lägga till fler kontakter." << endl; } break; case 4: cout << "Programmet avslutas. Hej då!" << endl; break; default: cout << "Felaktigt val, vänligen försök igen." << endl; } while (choice != 4); cout << "Programmet avslutas. Hej då!" << endl; return 0; }

Tack som fan på förhand.

Du stänger aldrig main-funktionen med en }

Som det har nämnts tidigare blir detta ganska tydligt om man sitter i en IDE eller editor (Visual Studio Code, eller annat) och på så sätt slipper du sitta efter bortglömda parenteser, måsvingar eller semikolon i timmar.

Permalänk
Medlem
Skrivet av KirderfNossral:

Du stänger aldrig main-funktionen med en }

Som det har nämnts tidigare blir detta ganska tydligt om man sitter i en IDE eller editor (Visual Studio Code, eller annat) och på så sätt slipper du sitta efter bortglömda parenteser, måsvingar eller semikolon i timmar.

Jag har Microsoft Visual Studio. Jag tycker jag stirrat mig blind och räknat måsvingar, men vilat hjärnan någon timma så på´t igen.

Permalänk
Medlem
Skrivet av Rikurt:

Hej alla, vet att jag skrivit mycket, jag fick min kod körbar, och la till en sökfunktion efter lite googlande, nu får jag upp 1 felmeddelande, försökt copilot på denna då jag har deadline idag och suttit flera timmar med detta program, är det någon vass som bara enkelt kan säga vad jag behöver göra för att få programmet körbart? Just nu klagar den på no matching token, och jag har varit dålig på det tidigare, men stirrat mig blind, verkligen blind. Och är lite desperat just nu.

#include <iostream> #include <string> using namespace std; struct Contact { string name; string number; string address; }; void printContact(const Contact& contact) { cout << "Namn: " << contact.name << endl; cout << "Nummer: " << contact.number << endl; cout << "Adress: " << contact.address << endl; } int main() { const int maxContacts = 10; Contact addressBook[10]; // Lägg in grunddatan i adressboken, namn, nummer, adress nedan addressBook[0] = { "Anna", "0721234567", "Drottninggatan 12, Stockholm" }; addressBook[1] = { "Krister", "072123476", "Kungsgatan 11, Stockholm" }; addressBook[2] = { "Josefin", "0721234765", "Fridhemsgatan 13, Stockholm" }; addressBook[3] = { "Rikard", "0721237654", "Pilgatan 17, Huddinge" }; addressBook[4] = { "Sara", "0721276543" , "Patron Pers Väg 10, Huddinge" }; addressBook[5] = { "Theodor", "071765432", "Kamratgatan 19, Stockholm" }; addressBook[6] = { "Emelie", "0727654321", "Trattstigen 9, Stockholm" }; addressBook[7] = { "Sebastian", "0727654312", "Kantarellgatan 6, Lund" }; addressBook[8] = { "Josefin", "0727651234", "Fagergatan 4, Bromma" }; addressBook[9] = { "Victor", "0721765234", "Skjutgatan 55, Haninge" }; int choice; do { cout << "Välkommen till adressboken" << endl; cout << "1. Visa alla kontakter" << endl; cout << "2. Sök efter kontakt" << endl; cout << "3. Lägg till kontakt" << endl; cout << "4. Avsluta" << endl; cout << "Vänligen välj ett alternativ (1-4): "; cin >> choice; switch (choice) { case 1: // Visa alla kontakter for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty()) { cout << "Kontakt " << i + 1 << endl; printContact(addressBook[i]); cout << endl; } } break; case 2: // Sök efter kontakt string searchTerm; cout << "Skriv in sökterm (namn, nummer eller adress): "; cin.ignore(); // Rensar inputen getline(cin, searchTerm); bool found = false; for (int i = 0; i < 10; ++i) { if (!addressBook[i].name.empty() && (addressBook[i].name.find(searchTerm) != string::npos || addressBook[i].number.find(searchTerm) != string::npos || addressBook[i].address.find(searchTerm) != string::npos)) { printContact(addressBook[i]); found = true; } } if (!found) { cout << "Ingen matchande kontakt hittades." << endl; } break; case 3: // Lägg till ny kontakt if (addressBook[9].name.empty()) { cout << "Ange namn: "; cin.ignore(); // Rensar inputen getline(cin, addressBook[9].name); cout << "Ange nummer: "; getline(cin, addressBook[9].number); cout << "Ange adress: "; getline(cin, addressBook[9].address); cout << "Kontakt tillagd!" << endl; } else { cout << "Adressboken är full. Du kan inte lägga till fler kontakter." << endl; } break; case 4: cout << "Programmet avslutas. Hej då!" << endl; break; default: cout << "Felaktigt val, vänligen försök igen." << endl; } while (choice != 4); cout << "Programmet avslutas. Hej då!" << endl; return 0; }

Tack som fan på förhand.

Saknas } i slutet av din switch-sats, nu ligger det avslutande blocket av do-slingan där.

EDIT: Du kan möjligen behöva sätta extra måsvingar runt fall 2 och 3 eftersom du skapar lokala variabler där. Du har också dubbel utskrift av samma text när programmet avslutas. Borde duga att ta bort utskriften precis i slutet.

Visa signatur

Asus Prime B350-Plus | AMD Ryzen 5 5600 | 32 GB RAM | 16 GB Radeon RX 6800 XT | 12 TB lagring | 650 W | GNU/Linux

Permalänk
Medlem

Du kan prata med ChatGPT den kommer garanterat kunna hjälpa dig vidare där du fastnar.

Permalänk
Medlem

W3schools har en massa exempel och är en bra site för många språk nuförtiden

Permalänk
Medlem

Deras C++-del är dock inte särskilt bra, den använder omodern C++ och består mest av korta exempel som hoppar över viktiga koncept och lär ut dåliga vanor. Vill man lära sig C++ så är Learn C++ en mycket bättre sida.