Wczytywanie liczb z konsoli

0

Chciałem napisać krótki program, który wczytywałby liczy z konsoli i wypisywał je na ekran, po wcześniejszym zapisaniu ich jako "int". Pierwsza liczba jest wczytywana prawidłowo, natomiast druga już nie. Gdzie leży błąd? Z góry dziękuję za pomoc

#include <stdio.h>

int main(int argc, char *argv[]){

	int a, b;

	sscanf(argv[1], "%d %d",&a,&b);
	printf("Podane liczby to %d i %d\n",a, b);
	
return 0;
}
1

Zamień

sscanf(argv[1], "%d %d",&a,&b);

na

scanf("%d %d",&a,&b);

i powinno działać, aczkolwiek nie sprawdzałem.

0

Ale wtedy podaję liczby jakby po uruchomieniu programu, a ja chciałem, żeby podać je w komendzie ./program 5 4
gdzie 5 i 4 są liczbami do wczytania

2

Pamiętaj, że argv zawiera tablicę wszystkich parametrów programu. Jeśli odpalasz program w taki sposób:

./program 35 65

to w argv[0] ląduje "program", w argv[1] ląduje "35", a w argv[2] "65". Jak widzisz, podane liczby nie znajdują się tylko w argv[1], ale są już wstępnie rozdzielone. Z tego wynika, że czytając z argv[1] Twoim sposobem zawsze dostaniesz tylko jedną liczbę. Możesz albo zmienić sposób czytania danych z parametrów programu, albo odpalać go w taki sposób, żeby podane liczby tworzyły jeden ciąg znaków, na przykład:

./program "35 65"
2

Ewentualnie można użyć funkcji strtol w ten sposób:

int main(int argc, char *argv[])
{
	int a, b;

	a = strtol(argv[1], NULL, 10);
	b = strtol(argv[2], NULL, 10);

	printf("Podane liczby to %d i %d\n",a, b);
	return 0;
}

Drugi argument tej funkcji to wskaźnik na znak na którym skończyło się parsowanie ciągu znaków.

Ta funkcja jest w miarę bezpieczna (nie będzie próbowała na siłę parsować) więc gdy np. jeden z Twoich argumentów do programu to 14b to znak b zostanie zignorowany.

0

Dziękuję za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1