Wczytywanie liczb z konsoli

Wczytywanie liczb z konsoli
H5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
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

Kopiuj
#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;
}
SI
  • Rejestracja: dni
  • Ostatnio: dni
1

Zamień

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

na

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

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

H5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
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

maciekniewielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 36
2

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

Kopiuj
./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:

Kopiuj
./program "35 65"
atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
2

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

Kopiuj
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.

H5
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Dziękuję za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.