• 1
  • 2
2022-01-11, 17:01
  #1
Medlem
Hur skriver jag ett program som exekverar
./mittProgram 5 6
11
Alltså att programmet tar två parametrar utan att trycka på retur och exekverar direkt när jag trycker på retur?

cout << "enter two numbers" << endl;
>> i >> j;
cout << i + j << endl;
Citera
2022-01-11, 18:39
  #2
Medlem
äsch struntsamma jag provar låta programmet ta input med return.
Däremot undrar jag hur man stoppar en while loop med return knappen?

cin >> i;
while(i != return-knappen){
}
Citera
2022-01-11, 19:46
  #3
Medlem
Citat:
Ursprungligen postat av bosscs2
äsch struntsamma jag provar låta programmet ta input med return.
Däremot undrar jag hur man stoppar en while loop med return knappen?

cin >> i;
while(i != return-knappen){
}
Tycker inte du ska strunta i det. Om du läser en kurs i C/C++ och använder Linux så borde du lära dig att skicka med argument till programmen. Sök på 'argv' och 'argc' för att se hur du kan skicka argument till ditt program via command line. Är inte speciellt komplicerat.
Citera
2022-01-11, 19:52
  #4
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av bosscs2
äsch struntsamma jag provar låta programmet ta input med return.
Däremot undrar jag hur man stoppar en while loop med return knappen?

cin >> i;
while(i != return-knappen){
}
Om du istället använder std::getline stoppar den som default input vid newline och tar bort newline från strängen.
Alltså är längden på retursträngen lika med noll om du enbart trycker på enter.
Därför kan du upprepa loopen om längden är mer än noll.
Om det är heltal som du vill komma åt kan du använda stoi() på strängen.

http://cpp.sh/3cpmo

Kod:
// Example program
#include <iostream>
#include <string>

int main()
{
  
std::string name;
  
  
std::size_t l;
  do
  {
    
std::cout << "What is your name? ";
    
std::getline (std::cinname);
    
l=name.length();
    if (
l>0
      
std::cout << "Hello, " << name << "!\n";
  } while (
l>0);


Läs mer:
Citat:
std::getline (string)
C++98C++11
(1)
istream& getline (istream& is, string& str, char delim);
(2)
istream& getline (istream& is, string& str);
Get line from stream into string
Extracts characters from is and stores them into str until the delimitation character delim is found (or the newline character, '\n', for (2)).

The extraction also stops if the end of file is reached in is or if some other error occurs during the input operation.

If the delimiter is found, it is extracted and discarded (i.e. it is not stored and the next input operation will begin after it).

Note that any content in str before the call is replaced by the newly extracted sequence.
https://www.cplusplus.com/reference/...tring/getline/
__________________
Senast redigerad av Enterprise 2022-01-11 kl. 20:25.
Citera
2022-01-11, 20:23
  #5
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av DieTrolle
Tycker inte du ska strunta i det. Om du läser en kurs i C/C++ och använder Linux så borde du lära dig att skicka med argument till programmen. Sök på 'argv' och 'argc' för att se hur du kan skicka argument till ditt program via command line. Är inte speciellt komplicerat.
Håller med om att argument är bättre, men man måste ju börja lära sig någonstans.
Citera
2022-01-11, 20:34
  #6
Medlem
Citat:
Ursprungligen postat av Enterprise
Håller med om att argument är bättre, men man måste ju börja lära sig någonstans.
På problemformuleringen så får jag intrycket av att uppgiften specificerar att det är så programmet ska anropas. Tror inte TS har kompetens själv att komma upp med att programmet ska anropas på detta sätt....
Citera
2022-01-11, 20:36
  #7
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av DieTrolle
På problemformuleringen så får jag intrycket av att uppgiften specificerar att det är så programmet ska anropas. Tror inte TS har kompetens själv att komma upp med att programmet ska anropas på detta sätt....
Sant
Citera
2022-01-11, 21:22
  #8
Medlem
t.ex.

Kod:
#include <iostream>

int main(int argc, char **argv) {
    std::cout << std::stoi(argv[1]) + std::stoi(argv[2]) << std::endl;
    return 0;
}

Felhantering får du lösa själv
Citera
2022-01-11, 22:04
  #9
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av dunob
t.ex.

Kod:
#include <iostream>

int main(int argc, char **argv) {
    std::cout << std::stoi(argv[1]) + std::stoi(argv[2]) << std::endl;
    return 0;
}

Felhantering får du lösa själv
Det där är hela lösningen, koncist och snyggt, och TS går vidare none the wiser
Citera
2022-01-12, 21:24
  #10
Medlem
Citat:
Ursprungligen postat av Enterprise
Om du istället använder std::getline stoppar den som default input vid newline och tar bort newline från strängen.
Alltså är längden på retursträngen lika med noll om du enbart trycker på enter.
Därför kan du upprepa loopen om längden är mer än noll.
Om det är heltal som du vill komma åt kan du använda stoi() på strängen.

Ok! Så getline genererar 0 vid blanksteg, mycket användbart! Stoi() för konvertering från string till int, tack, ska studera det vidare innan j läser vidare i tråden.
Citera
2022-01-12, 21:43
  #11
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av bosscs2
Ok! Så getline genererar 0 vid blanksteg, mycket användbart! Stoi() för konvertering från string till int, tack, ska studera det vidare innan j läser vidare i tråden.
Nja, nästan, getline renderar utifrån input enbart bestående av newline-tecknet en sträng med length (längden) noll.
Citera
2022-01-13, 00:18
  #12
Medlem
Citat:
Ursprungligen postat av bosscs2
Ok! Så getline genererar 0 vid blanksteg, mycket användbart! Stoi() för konvertering från string till int, tack, ska studera det vidare innan j läser vidare i tråden.
Nej. Newline är radbrytning, inte blanksteg.
Blanksteg = mellanslag.
Vill du ha blanksteg som delimiter får du använda en space-char som tredje argument.
Ex.
Kod:
std::getline(std::cin, minstring, ' ');
Citera
  • 1
  • 2

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