Parametry wiersza poleceń w Linuxie nie działają.

0

Witam wszystkich. Mam problem ponieważ mój Windows nie działa i po włączeniu Ubuntu chciałem nadal robić ćwiczenia z książki. Program tak jakby nie odczytuje parametrów wiersza poleceń. W parametrach mam wpisać dwie nazwy plików tekstowych, więc wpisuję np. "Nowy.txt" oraz "Nowy2.txt". W wyniku przy takim kodzie początkowym:

int main(int argc, char *argv[])
{
	FILE *F1, *F2;
	char c, d;
	int a, b, licz1, licz2;
	if(argc!=3)
		{
			printf("Za malo\\duzo argumentow...");
			return 1;
		}

Za każdym razem, ile nazw plików bym nie wpisał program mi wyświetla "Za malo\duzo argumentow...". Używam do programowania w Linuxie programu Geany. Wie ktoś o co chodzi?

0

Wie ktoś o co chodzi?

O to że debuggera nie użyłeś

0

Zrób nowy projekt w nowym miejscu, przeklej kod, spróbuj skompilować i odpalić.

0

Wyświetl sobie ile masz tych argumentów, to będziesz wiedzieć więcej.

0

Wpisałem funkcję printf() i pokazuje mi, że jest tylko jeden argument, czyli tak jakby nie było tych dwóch. Używam funkcji w programie, aby budował przy użyciu parametrów i tak wychodzi. Próbowałem też przekleić kod do innego pliku, ale przeklejony kod jest cały czarny (a powinno być wszystko wykolorowane) i nie da się go ani skompilować, ani zbudować.

0

Ok, to jest ten program, co robi? Pisze na początku kodu. Program pewnie dało się łatwiej zrobić, ale już mam taką naturę, że dokładam sobie roboty.

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

/* Program ma za zadanie otwierac dwa pliki i wyswietlac jeden wiersz z pierwszego jeden z drugiego na przemian az do konca plikow*/

int main(int argc, char *argv[])
{
	FILE *F1, *F2;
	char c, d;
	int a, b, licz1, licz2;
	printf("Argumentow jest %d\n", argc);
	if(argc!=3)
		{
			printf("Za malo\\duzo argumentow...");
			return 1;
		}
	if((F1=fopen(argv[1], "r"))==NULL)
		{
			printf("Blad przy odczycie pliku %s...", argv[1]);
			return 1;	
		}
	if((F2=fopen(argv[2], "r"))==NULL)
		{
			printf("Blad przy odczycie pliku %s...", argv[2]);
			return 1;	
		}
	a=1;
	b=1;
	while((c=getc(F1))!=EOF)
			if(c=='\n')	
				a++;
	while((d=getc(F2))!=EOF)
			if(d=='\n')	
				b++;
	rewind(F1);
	rewind(F2);
	for( licz1=0, licz2=0, c='a', d='a'; licz1<=a && licz2<=b; licz1++, licz2++)
		{
			while((c=getc(F1))!='\n' && c!=EOF)
				putc(c, stdout);
			printf("\n");
			while((d=getc(F2))!='\n' && d!=EOF)
				putc(d, stdout);
			printf("\n");
		}
	if(fclose(F1)!=0)
		{
			printf("Blad przy zamykaniu pliku %s...",argv[1]);
			return 2;
		}
	if(fclose(F2)!=0)
		{
			printf("Blad przy zamykaniu pliku %s...",argv[2]);
			return 2;
		}
	return 0;
}						
1

Otwierasz plik w trybie tekstowym zaś czytasz/piszesz w trybie binarnym, przeważnie w efekcie otrzymasz pokiełbaszony plik wynikowy. Albo zastosuj: przy otwarciu "rb" i "wb" odpowiednio, albo czytaj/pisz while(fscanf(f_out,"%d",&C)==1) fprintf(f_in,"%d\n",C);

Dopóki to napisałem już masz zupełnie inny program, lepiej doklejaj zamiast zmieniać.

Czemu nie zrobić tego bezpośrednio, bez liczenia wierszy:
Otwierasz pliki.

do
  {
   while((c=getc(F1))!='\n' && c!=EOF) putc(c,stdout);
   printf("\n");
   while((d=getc(F2))!='\n' && d!=EOF) putc(d,stdout);
   printf("\n");
  } while((c!=EOF)&&(d!=EOF));

Zamykasz pliki.

0
_13th_Dragon napisał(a):

Czemu nie zrobić tego bezpośrednio, bez liczenia wierszy

Bo się uczę dopiero i wszystko wydaje mi się nie takie proste jak jest. Dzięki za wszelką pomoc ;]

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