Vinnaren i pepparkakshustävlingen!
2010-03-19, 17:00
  #1
Medlem
metapods avatar
I denna tråd bör mindre frågeställningar samt problem som egentligen inte behöver en egen tråd postas. Detta på grund utav det enkla faktum att många skapar trådar med en titel såsom "C++ programmering" för att ställa en simpel fråga, få ett simpelt svar och sedan lämna tråden i fråga till sitt öde.

Denna tråd kommer även att fungera som en sk. FAQ (Frequently Asked Questions), så innan trådpost får du mer än gärna ögna igenom denna tråd. Jag funderar på om man eventuellt kan skapa ett litet index över frågor samt svar i denna post - detta med hjälp utav en moderator.

Det finns ett antal saker att tänka på vid postande i denna tråd (att använda [code]<din kod />[/code]-taggar är underförstått):
  • Din frågeställning ska vara tydlig och vid behov ska post även innehålla ett såkallat test-case där du med så lite kod som möjligt beskriver ditt problem. Har du många frågeställningar om samma problem är det bättre att du skapar en egen tråd.

  • Innehåller din frågeställning mer än 50 rader kod bör du fundera på om det går att göra ett mer enkelt exempel på vad du menar, om detta ej är möjligt bör du posta din kod på valfri pastebin (codepad.org rekommenderas) för att sedan länka till denna post i ditt inlägg.

  • Eventuella compile errors skall bifogas (även dessa får gärna inkluderas inom [code][/code]-taggar, eller liknande).

  • Väljer du att svara på en frågeställning skall frågeställningen citeras och ditt svar ska vara såpass välformulerat att ytterligare frågeställningar egentligen ej ska vara nödvändiga (detta är i praktiken omöjligt men går att genomföra om man lägger manken till). Ditt svar ska ej diskutera liknande problem utan fokusera på den originella frågeställningen så gott det går.

Eventuellt kommer det kanske att komma klagomål på tråden vilka jag då hänvisar till PM alternativt att du helt enkelt RP:ar detta inlägg. Jag har ej pratat med någon moderator om huruvida denna trådstart är kosher eller inte, så om tråden helt sonika försvinner beror detta ovanstående.
Citera
2010-03-19, 17:00
  #2
Medlem
metapods avatar
Inlägg reserverat för eventuellt index över kommande FAQ.
Citera
2010-03-28, 21:21
  #3
Medlem
Forumistens avatar
Kod:
cin >> name
if (name==xxx) { // xxx = staden
cout << city << name << ".\n"; // You live in xxx
cout << "The creator of this software also lives in xxx\n";
}
else
{
cout << city << name << ".\n"; // You live in xxx
cout << "The creator of this software lives in xxx\n";
}

Användaren ska skriva in sin stad, stämmer staden med samma stad som jag bor i så blir svaret annorlunda.

Mitt problem är att jag inte lyckas med att få DevC++ att kompilera om jag kör med bokstäver med if-raden.
Skriver jag name==stockholm så hakar programmet upp sig, jag minns att jag lyckades med detta förut. Kör jag med siffror så fungerar det.

Tack på förhand.
Citera
2010-03-28, 21:26
  #4
Medlem
andropas avatar
dessvärre så går det inte att jämföra strängar på det viset, utan du bör använda dig av en funktion som heter strcmp (eller, motsvarande i std::string, antar jag...) för att göra det du vill...

strcmp returnerar 0 ifall strängarna stämmer överens, så du kan använda följande kod:
Kod:
if(strcmp(name, "stockholm") == 0)
printf("städerna stämde överns");
else
printf("städerna stämde inte överens");
du måste inkludera stdio.h och string.h för att koden ovanför skall fungera...
Citera
2010-03-28, 21:35
  #5
Medlem
Forumistens avatar
Citat:
Ursprungligen postat av andropa
dessvärre så går det inte att jämföra strängar på det viset, utan du bör använda dig av en funktion som heter strcmp (eller, motsvarande i std::string, antar jag...) för att göra det du vill...

strcmp returnerar 0 ifall strängarna stämmer överens, så du kan använda följande kod:
Kod:
if(strcmp(name, "stockholm") == 0)
printf("städerna stämde överns");
else
printf("städerna stämde inte överens");
du måste inkludera stdio.h och string.h för att koden ovanför skall fungera...

Jag uppskattar att du lägger ner tid för att hjälpa mig.
Jag bytte ut min if mot din if och felet jag får är detta:

Kod:
no matching function for call to `strcmp(std::string&, const char[10])' 

Jag är helt ny på C++, jag inkluderade stdio.h och string.h.

Tack på förhand.
Citera
2010-03-28, 21:38
  #6
Medlem
Annars så funkar
Kod:
if(name == "stockholm"
Citera
2010-03-28, 21:39
  #7
Medlem
andropas avatar
Citat:
Ursprungligen postat av Forumisten
Jag uppskattar att du lägger ner tid för att hjälpa mig.
Jag bytte ut min if mot din if och felet jag får är detta:

Kod:
no matching function for call to `strcmp(std::string&, const char[10])' 

Jag är helt ny på C++, jag inkluderade stdio.h och string.h.

Tack på förhand.


aha, du använder string. okej, då bör din ifsats se ut så här:
Kod:
if(strcmp(name.c_str(), "stockholm") == 0)
printf("städerna stämde överns");
else
printf("städerna stämde inte överens")

så skall det fungera. vad jag gjorde där uppe är att konverta från "string"-klassen till en vanlig c-string, vilket är vad strcmp förväntar sig.

du kan också använda dig av compare, vilket är en medlemsfunktion i std::string

Kod:
if(name.compare("stockholm") == 0)
printf("ohyeah");
else
printf("noooo!");


edit: och ja, std::string overloadar visst ==, så det SweCrime skrev fungerar även det utmärkt.
__________________
Senast redigerad av andropa 2010-03-28 kl. 21:44.
Citera
2010-03-28, 21:46
  #8
Medlem
Logisks avatar
Citat:
Ursprungligen postat av andropa
Kod:
if(strcmp(name, "stockholm") == 0)
.

Får man fråga varför du använder "== 0"? Varför just 0?
Citera
2010-03-28, 21:47
  #9
Medlem
Forumistens avatar
Tack för svaren !

SweCrimes svar fungerade perfekt, däremot fungerade det inte när jag skrev det, var det för att jag hade ett mellanslag ?

Det fungerar perfekt nu så tack.
Citera
2010-03-28, 21:47
  #10
Medlem
andropas avatar
Citat:
Ursprungligen postat av Logisk
Får man fråga varför du använder "== 0"? Varför just 0?


strcmp returnerar 0 om strängarna stämmer överens, så jag skrev ut det så för att vara så tydlig som möjligt.
Citera
2010-03-28, 21:56
  #11
Medlem
Joakwims avatar
Kod:
#include <iostream>

using namespace std;

int main()
{
  
int a;
  
cin >> a;      //om en bokstav matas in
  
int array[a];  //så havererar koden här
  
return 0;


Hur kan man komma runt det problem att användaren möjligtvis matar in en bokstav, när han inte under några omständigheter får göra det?
Citera
2010-03-28, 22:03
  #12
Medlem
Citat:
Ursprungligen postat av Forumisten
Tack för svaren !

SweCrimes svar fungerade perfekt, däremot fungerade det inte när jag skrev det, var det för att jag hade ett mellanslag ?

Det fungerar perfekt nu så tack.
Hmm vad menar du?
Detta funkar för mig i visual studio:


Output:
Citat:
Mata in stad: stockholm
Ratt
Tryck ned valfri tangent för att fortsätta...

Om du däremot skall jämföra två stringar så använder du något av dom andra bra förslagen som nämnts här
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback