2009-02-07 12 views
9

W jaki sposób można go wprowadzić w miejscu, w którym program odczytuje dowolne dwie liczby całkowite wejściowe przed uruchomieniem programu? Chcę wyjście wyglądać tak, ze X i Y są jakieś zmienne wpisane (Używam Cygwin):Jak odczytywać liczby jako argumenty polecenia?

$ ./axy

produktem xiy

suma x i y

Użyłem int main(int argc, char *argv[]). Próbowałem przypisać argv[2] do x i argv[3] do y, ale podczas kompilacji programu mówi, że przydział czyni liczbę całkowitą ze wskaźnika bez rzutowania. Co to oznacza i jak mogę to naprawić?

+0

Jakiego języka używasz? – sykora

+0

Czy podręcznik nie zawiera przykładów użycia argumentów komend? – mmcdole

+0

Używam języka c. Omówiliśmy tylko pierwsze trzy rozdziały tej książki, a rozdział na ten temat znajduje się w połowie i jest całkowitym bełkotem dla mnie. Nauczyciel omówił to, gdy byłem nieobecny, więc nie mam pojęcia! – Kaity

Odpowiedz

30

Zakładając języka C:

  • argumenty linii polecenia znajdują się w tablicy argv - argv [1], [2] argv itp
  • Konwersja argument ciąg do całkowitej mogą być wykonane z funkcja atoi.
  • Wyjście można wykonać za pomocą funkcji printf.

[Stara się nauczyć cię łowić, zamiast dostarczać rybę. Powodzenia!]

17

Zakładając, że używasz bash, możesz użyć tych argumentów za 1, 2, 3, itd. Jeśli jednak używasz C, kod powinien wyglądać mniej więcej tak:

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

main(int argc, char *argv[]) { 
    if(argc<=1) { 
     printf("You did not feed me arguments, I will die now :(..."); 
     exit(1); 
    } //otherwise continue on our merry way.... 
    int arg1 = atoi(argv[1]); //argv[0] is the program name 
           //atoi = ascii to int 
    //Lets get a-crackin! 
} 

Mam nadzieję, że to pomoże.

+0

To działa dobrze. –

4

Po pierwsze, jeśli uruchomić program C jako

./axy

następnie jest argv [0] x jest argv [1], a y jest argv [2] , ponieważ tablice C są oparte na 0 (tzn. pierwszy element tablicy jest indeksowany 0.

Uświadom sobie, że argv jest tablicą (lub zawsze myślałem o niej jako ARGument Vector, choć możesz o tym pomyśleć jako tablica wartości ARGument) wskaźników łańcucha znaków. Musisz więc przekonwertować ciągi na liczbę całkowitą s. Na szczęście C ma funkcje biblioteczne do konwersji ASCII na liczbę całkowitą. Zobacz dokumentację stdlib.h.

Powodzenia!

0

W argumentach linii poleceń char * argv [] jest typem łańcucha. Musimy przekonwertować go na liczby całkowite. Robimy to poprzez rzutowanie typów, ale w OOP robimy to za pomocą funkcji atoi (metody), to działa jak rzutowania (czyli metodę konwersji jednego typu danych do innych)

+1

char * argv [] jest wskaźnikiem wskaźnika char - tutaj jest to tablica char *, a nie typ łańcucha. – mattsap

0
int arg1 = argv[1]; 

nie zadziała, ponieważ to jest tablicą wskaźników, które posiada wszystkie adresy argv[0]....argv[n] uzyskać wartość od argv[..] przypuszczać argv[1] trzeba napisać:

int n=*argv[1]-'0'; // Direct atoi 
0

Mój kod wyglądałby następująco.

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

int main(int argc, char *argv[]) 
{ 
    // argc is number of arguments given including a.out in command line 
    // argv is a list of string containing command line arguments 
    int total = 0; 
    int i; 
    char *value; 
    for(i = 1; i < argc; i++) 
    { 
     // The integers given is read as (char *) 
     value = argv[i]; 
     printf("Command line index: %d value: %s in ascii: %d\n", i, value, *value); 

     // Convert ascii to integer. 
     // atoi function is defined in stdlib.h 
     total += atoi(value); 
    } 
    // .2f limits the decimals to two digits after '.' 
    printf("Total of given integers is %d\n", total); 
} 

enter image description here

Powiązane problemy