Witam,
Moi drodzy mam dzisiaj problem związany nie z czystym programowanie ale z dwojakim działaniem programu na różnych systemach operacyjnych...
Otóż... na Windowsie kompilując w CodeBlock'sie rezultatem jest "linia zachęty" >>> i oczekiwanie na input...
Natomiast kompilując i odpalając na Linuchu rezultatem jest oczekiwanie na input a dopiero później wypisanie "linii zachęty"
Dziwi mnie zachowanie programu w Linuxie ponieważ komenda printf(">>> "); jest jako pierwsza w pętli while dlatego powinna zostać wykonana przed read'em...
Jakieś pomysły ??
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <signal.h>
#include <string.h>
//#include <sys/wait.h>
char zczytanaKomenda[1000];
char tablicaStringow[32][50];
void ZerujTabliceStringw()
{
int i;
for (i = 0; i < 32; i++)
{
memset(tablicaStringow[i], 0, 50);
}
}
int PodzielNaArgumenty(int n)
{
int i, j, kolejnoscAtrybutu=0, koniecAtrybutu=0, poczatekAtrybutu=0;
for (i = 0; i < n; i++)
{
if ((zczytanaKomenda[i] == 32) || (zczytanaKomenda[i] == '\n'))
{
koniecAtrybutu = i;
for (j = 0; j < koniecAtrybutu-poczatekAtrybutu; j++ )
{
tablicaStringow[kolejnoscAtrybutu][j] = zczytanaKomenda[poczatekAtrybutu + j];
}
poczatekAtrybutu = i + 1;
kolejnoscAtrybutu++;
}
}
return kolejnoscAtrybutu;
}
int main (int argc, char* argv[])
{
int i, n;
while (1)
{
printf(">>> ");
ZerujTabliceStringw();
if ((i = read(0, zczytanaKomenda, 1000)) > 1)
{
n = PodzielNaArgumenty(i);
}
else if (i == 1)
{
n = 0;
}
if (i == -1)
{
fprintf(stderr, "Blad odczytu z lini polecen");
}
printf("Ilosc znakow: %d\n", i);
printf("Ilosc argumentow: %d\n", n);
printf("TabStr[0]: %s\n", tablicaStringow[0]);
printf("TabStr[1]: %s\n", tablicaStringow[1]);
printf("TabStr[2]: %s\n", tablicaStringow[2]);
printf("TabStr[3]: %s\n", tablicaStringow[3]);
}
return 0;
}