Wczytywanie liczb z konsoli

2018-12-22 22:16
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;
}
edytowany 5x, ostatnio: furious programming, 2018-12-22 23:08

Pozostało 580 znaków

2018-12-22 22:47
sig
1

Zamień

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

na

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

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

edytowany 1x, ostatnio: furious programming, 2018-12-22 23:09

Pozostało 580 znaków

2018-12-22 22:52
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

Pozostało 580 znaków

2018-12-22 23:03
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"

Pozostało 580 znaków

2018-12-22 23:05
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.

Jeszcze przydałoby się sprawdzenie czy wartość argc jest poprawna i będzie ok. - Mr.YaHooo 2018-12-22 23:06

Pozostało 580 znaków

2018-12-22 23:08
0

Dziękuję za pomoc :)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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