odczytywanie wartosci z wejscia

0

W jaki sposob mozna dokonac nastepujacej operacji:

wpisuje w programie nastepujaca tresc:

polecenie opcja1 opcja2

i chcialbym, by w momencie wczytania takiego zakresu elementy te przeszly do pewnej tablicy/zmiennych.

Powyzszy scenariusz jest dosc prosty, mozna to zrobic za pomoca funkcji
scanf ("%s %s %s", pol,op1,op2);

Co musze jednak zrobic by podczas wczytywania bylo mozliwe pominiecie opcji 2, a wiec by odbylo sie odczytanie polecenia i opcji1, natomiast opcja2 nie jest potrzebna - jesli sie pojawi to wtedy wykona operacje scanf ("%s %s %s", pol,op1,op2), a gdy opcja2 sie nie pojawi nie jest wpisana, nie czeka na wykonanie powyzszego tylko szczytuje tylko i wylacznie wpisane parametry.

Pozdrawiam!

0

musiałbyś zdeklarować sobie tą funkcję żeby miała opcjonalne parametry (jeśli ich nie podasz to podczas kompilacji kompilator sam je doda)

np. (w moim języku) jest tak

declare suma(a1:int, a2:int, opt a3=0:int, opt a4=0:int),int

wtedy można wywołać funkcję podając conajmniej 2 parametry

wynik = suma(3, 4)

kompilator sam wyśle na stos a3 i a4 jako zera (zera bo zero nie zmienia sumy). Funkcja wykonawcza powinna odbierać zawsze wszystkie parametry jeśli nie chcesz mieć problemów z okienkami z systemu

sub suma(a1:int, a2:int, a3:int, a4:int),int
  return a1+a2+a3+a4
endsub

dodatkowe parametry powinny być takie, aby nie zmieniały wyniku lub by było wiadomo że taki parametr jest podstawiony przez kompilator

np. dla mnożenia każdy dodatkowy parametr powinien być=1

declare mul(a1:int, a2:int, opt a3=1:int),int

wynik = mul(100,5) // da wynik 500
wynik = mul(100,5, 2) // da wynik 1000

albo

declare pole(w:int, h:int, opt podzielprzez=0:int),int

jesli wywołasz pole(3, 4) to funkcja powinna tylko pomnożyć 3 i 4, bo wiadomo że przez zero nie da się podzielić (sprawdzasz trzeci parametr czy jest zakazany)

jest jeszcze takis coś, jak dowolna liczba parametrów

declare myfunction(rozkaz:int, count:int, ...),int

tutaj możesz zrobić tak:

wynik = myfunction(komenda, 0)
wynik = myfunction(komenda, 1, "hello")
wynik = myfunction(komenda, 2, "hello", " word")
wynik = myfunction(komenda, 4, "startserver", 80, 21, "runhide")

ale tu poszukaj w helpie o VA_START i podobnych

mam nadzieję że o to chodzi

a zerknij do stdio.h

_CRTIMP int __cdecl	sprintf (char*, const char*, ...)

na podstawie piewszego stringu formatującego ta funkcja wie ile parametrów ma pobrać ze stosu

po naszemu to wygląda tak

DECLARE CDECL EXTERN sprintf alias _sprintf(buf as pointer,format as pointer,...)
DECLARE CDECL EXTERN printf alias _printf(...)

printf("%d\n", 29)
printf("hello")

funkcja _printf wyczai "%d" w stringu i pobierze parametr ze stosu

masz namiara

0

OK, to mi wiele wiele wytlumaczylo, ale nadal mam problem z realizacja praktyczna...

jakby to mialo wygladac

tak funkcja sczytujace dane z wejscia:

polecenie opcja1 opcja2 opcja3

polecenie opcja1 opcja2

polecenie opcja1 opcja2 (opcjonalnie).

Czy mozna to w jakis sposob sczytac do tablicy, tak jak dziala tablica argv czytajaca argumenty z wiersza polecen? Prosze o pomoc!

Pozdrawiam

0

wczytaj cały wiersz, podziel po spacjach na słowa, policz ile ich masz i tyle....
jak wiesz ile masz to juz mozesz dalej działać tak jak chcesz

0

W jaki sposob najprosciej podzielic po spacjach na slowach?? Czy dobrym pomyslem jest po pierwsze wskanowanie calej linii getsem(), a nastepnie sscanfem pobranie do zadenj liczby zmiennych i isprawdzanie ? :)

Pozdrawiam

0

gets() - wczytanie calej linii
strtok() - podzial ciagu wg wzorca

main(){
char a[1024]
gets(a);
char* s=strtok(a," ");
while(s){
printf("%s\n",s);
s=strtok(0," ");
}
return 0;
}

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