scanf + command + argument

 ( Cisco | 2004. szeptember 30., csütörtök - 17:41 )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Hi,

lenne egy kerdesem. A valasz nagyon surgos lenne. Tehat egy parancsot kell bekernem 1 db parameterrel, 2 scanf paranccsal, ugy hogy ha nem kap parametert bevitelnel, akkor irjon ki egy error message-t.
Mar nincs tobb otletem. :(

Cisco

Hali!

[code:1:90159711e4]#include <stdio.h>

int main()
{
char cmd[64], param[64];

if (scanf("%s %s", cmd, param) != 2) {
fprintf(stderr, "Keves parameter.\n");
return 1;
}

printf("cmd: %s; param: %s\n", cmd, param);

return 0;
}[/code:1:90159711e4]

Teszt:[code:1:90159711e4]$ echo a b | ./prog
cmd: a; param: b[/code:1:90159711e4]

Hi,

nekem nem mukodik, ha csak a parancsot adom meg, az enter utan var a parameterre.

Cisco

Hali!

Az azért van, mert a scanf() addig olvas, amig meg nincs a kellő számú paraméter, vagy amíg nem talál EOF-ot. A megoldás az, hogy beolvasod a sort fgets()-el, majd az sscanf()-et használod.

Hi,

ertem es en is erre a kovetkeztetesre jutottam, csak azt hittem valahogy megis meg lehet oldani ha ez a feladat:
The command is being read with scanf. Remember that scanf returns the command untill a whitespace. So if a command with an argument is given, scanf should be called two times. First, to determine the command. If the command needs an argument scanf should be called a second time to determine the argument. If an argument is expected but omitted by the user, the program should print an error message.

Cisco

Udv,

ha esetleg valaki gondolkodott rajta, nincs megoldas!!! Vagyis az a megoldas, hogy nincs megoldas. :)

Cisco

[quote:d7781dc253="Cisco"]Udv,

ha esetleg valaki gondolkodott rajta, nincs megoldas!!! Vagyis az a megoldas, hogy nincs megoldas. :)

Cisco[/quote:d7781dc253]

No most nem ertelek baratom... Amit angolbol citaltal, az mindent elmond...
En ezt a megoldast ertem alatta, habar sajatmagamnak en az egeszet egy scanf-be csinalnam meg... :-)

[code:1:d7781dc253]#include <stdlib.h>

main()
{
char cmd[256];
char arg[256];
scanf("%[^ \n\t\r]%*[ \t]", cmd);
if (strcmp (cmd, "cmd1") == 0 ||
strcmp (cmd, "cmd3") == 0 ||
strcmp (cmd, "cmd5") == 0 ||
strcmp (cmd, "cmd7") == 0 ||
strcmp (cmd, "cmd9") == 0)
{
if (n == 0 || scanf("%[^ \n\t\r]", arg) != 1)
{
printf("Error %s need an argument!\n", cmd);
return;
}
printf("cmd: %s, arg: %s\n", cmd, arg);
}
else
{
printf("cmd: %s\n", cmd);
}
}
[/code:1:d7781dc253]

Zsiraf[/code]

Udv!

Mit jelent ez a szo: "citaltal"
Ha esetleg arra gondoltal, hogy en forditottam angolra a feladotot, akkor tevedsz. En igy kaptam es bevagtam ide. Ok irtak: Michel van den Braak, Ben Juurlink, and Koen Bertels
Jah, amugy mi akar lenni az n valtozo a 14. sorban. Csak mert amiatt nem fut le a progi.

na, a legjobbakat,
Cisco

Ok, rajottem mire hasznaltad a "citalni" szot, tehat ha csak ezert irnal ne faraszd magad....