Flashback bygger pepparkakshus!
  • 1
  • 2
2022-01-22, 03:15
  #13
Medlem
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 fr du lsa sjlv

Ooops, TS fr inte glma bort att argv[0] r alltid programmets namn, kanske "main.exe" i detta fall.
Bde argv[1] och argv[2] kan dock vara tomma strngar, eller att om man frsker accessa dem att man fr felmeddelandet/exception "array out of bounds" eller ngot liknande.
Ifall main.exe anropas utan ngot argument s r i s fall argc == 1 och antalet argument r d 1, allts detsamma som programmets namn.
Om strngen argv[2] finns s r argc >= 3.
OBS Vet frsts att TS mste gra felhanteringen sjlv, s dessa ovanstende tips r bara till hjlp fr detta.
Citera
2022-01-22, 22:08
  #14
Medlem
Citat:
Ursprungligen postat av Enterprise
Om du istllet anvnder std::getline stoppar den som default input vid newline och tar bort newline frn strngen.
Allts r lngden p returstrngen lika med noll om du enbart trycker p enter.
Drfr kan du upprepa loopen om lngden r mer n noll.
Om det r heltal som du vill komma t kan du anvnda stoi() p strngen.

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);


Ls mer:

https://www.cplusplus.com/reference/...tring/getline/

och om man ska skriva motsvarande program i C, jag frsker med fljande:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int sum = 0;
	char numbers[255];
	size_t l;
	do
	{
    	scanf("%s",numbers);
    	l = strlen(numbers);
    	if (l > 0)
        	sum += atoi(numbers);
	} while (l > 0);
	printf("%d",sum);
}

Problemet r:
l = strlen(numbers)
fr inte lngden p anvndarens input?
Motsvarande function fr blanksteg = 0 verkar inte fungera med varken strlen eller sizeof s det mste vara ngot jag missat hr?
Citera
2022-01-23, 07:53
  #15
Medlem
edit: inte blanksteg, retur...
Citera
2022-01-23, 09:17
  #16
Moderator
vhes avatar
Citat:
Ursprungligen postat av bosscs2
Problemet r:
l = strlen(numbers)
fr inte lngden p anvndarens input?

Varfr frvntar du dig att anvndarens input ligger i variabeln numbers?
Citera
2022-01-23, 10:00
  #17
Medlem
Citat:
Ursprungligen postat av vhe
Varfr frvntar du dig att anvndarens input ligger i variabeln numbers?

Drfr att:
Kod:
scanf("%s",numbers);
fungerar som getline() i c++, tar input frn anvndaren?
Citera
2022-01-23, 10:13
  #18
Moderator
vhes avatar
Citat:
Ursprungligen postat av bosscs2
Drfr att:
Kod:
scanf("%s",numbers);
fungerar som getline() i c++, tar input frn anvndaren?

Hah, ja! Grovt feltnk av mig dr, ber om urskt.
Citera
2022-01-23, 10:38
  #19
Moderator
vhes avatar
Citat:
Ursprungligen postat av bosscs2
och om man ska skriva motsvarande program i C, jag frsker med fljande:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int sum = 0;
	char numbers[255];
	size_t l;
	do
	{
    	scanf("%s",numbers);
    	l = strlen(numbers);
    	if (l > 0)
        	sum += atoi(numbers);
	} while (l > 0);
	printf("%d",sum);
}

Problemet r:
l = strlen(numbers)
fr inte lngden p anvndarens input?
Motsvarande function fr blanksteg = 0 verkar inte fungera med varken strlen eller sizeof s det mste vara ngot jag missat hr?

(S, efter att ha lst lite i manual-sidan - jag kan som kanske mrks inte C)

Programmet fungerar ju s lnge du ger input. scanf() tar en formatstrng, och lser tills den hittat input fr att fylla formatstrngen. Den r m.a.o. inte njd med bara ett returntecken, och kommer att blockera tills du gett annan indata. Om du skickar ett EOF (t.ex. trycker Ctrl+D om du sitter i en Linux-terminal) s kommer den att returnera, ven om resultatet d troligen inte blir exakt vad du vill. Du behver titta p returvrdet frn scanf() fr att se om den lyckades, och om inte avbryta tidigt.
Citera
2022-01-23, 10:40
  #20
Medlem
Citat:
Ursprungligen postat av vhe
Hah, ja! Grovt feltnk av mig dr, ber om urskt.

jag vet inte om det r rtt?
scanf() tar vrde frn anvndaren men om vrdet r tomt som att trycka p returknappen s verkar funktionen ignorera det?
Citera
2022-01-23, 12:54
  #21
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av bosscs2
och om man ska skriva motsvarande program i C, jag frsker med fljande:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int sum = 0;
	char numbers[255];
	size_t l;
	do
	{
    	scanf("%s",numbers);
    	l = strlen(numbers);
    	if (l > 0)
        	sum += atoi(numbers);
	} while (l > 0);
	printf("%d",sum);
}

Problemet r:
l = strlen(numbers)
fr inte lngden p anvndarens input?
Motsvarande function fr blanksteg = 0 verkar inte fungera med varken strlen eller sizeof s det mste vara ngot jag missat hr?
Jag r inte expert p vare sig C++ eller C, men C++ har en strngklass som inte kan appliceras p C.
C-style strngar r allts annorlunda. En tom strng i C innehller en byte efter de r noll-avslutade.

Kolla p detta program dr msan anvnder getline fr att se hur du gr, men den tomma strngen innehller 1 tecken inte 0, vilket du mrker om du test kr detta p t.ex. https://cplayground.com/

Kod:
#include <stdio.h>
#include <stdlib.h>

int input(char *s,int length);

int main()
{
    
char *buffer;
    
size_t bufsize 32;
    
size_t characters;

    
buffer = (char *)malloc(bufsize sizeof(char));
    if( 
buffer == NULL)
    {
        
perror("Unable to allocate buffer");
        exit(
1);
    }

    
printf("Type something: ");
    
characters getline(&buffer,&bufsize,stdin);
    
printf("%zu characters were read.\n",characters);
    
printf("You typed: '%s'\n",buffer);

    return(
0);

__________________
Senast redigerad av Enterprise 2022-01-23 kl. 12:58.
Citera
2022-01-23, 13:18
  #22
Medlem
Ok lsningen r att scanf() ignorerar blanksteg, returnerar ingenting. Drfr mste man anvnda fgets(int exempel, param2, stdin) som initierar 1 vid blanksteg.
Citera
2022-01-23, 15:05
  #23
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av bosscs2
Ok lsningen r att scanf() ignorerar blanksteg, returnerar ingenting. Drfr mste man anvnda fgets(int exempel, param2, stdin) som initierar 1 vid blanksteg.
getline eller fgets (saken kan diskuteras):
https://stackoverflow.com/questions/...ation/55970443
__________________
Senast redigerad av Enterprise 2022-01-23 kl. 15:07.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in