Mam jeszcze jedno pytanie i jest ono związane z poprzednim programem, więc nie będę zakładał nowego tematu. Oto kod programu:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX 41
int main(int argc, char *argv[])
{
FILE *wsk;
char nazwa[MAX];
char ch;
int ilosc = 0;
int i = 2;
if (argc > 1 && strlen(argv[1]) != 1)
{
puts("Drugim argumentem powinien byc pojedynczy znak");
exit(1);
}
if (argc > 2)
{
while (i <= argc - 1)
{
if ((wsk = fopen(argv[i], "r")) == NULL)
{
puts("Blad otwarcia pliku");
exit(1);
}
while (ch = getc(wsk) != EOF)
{
if (ch == *argv[1])
ilosc++;
}
if (fclose(wsk) != 0)
{
puts("Blad zamkniecia pliku");
exit(1);
}
printf("%s %s %d\n", argv[i], argv[1], ilosc);
ilosc = 0;
i++;
}
}
else if (argc == 2)
{
puts("Podaj nazwe pliku do otwarcia");
while(gets(nazwa) != NULL && nazwa[0] != '\0')
{
if ((wsk = fopen(nazwa, "r")) == NULL)
{
puts("Blad otwarcia pliku");
exit(1);
}
while (ch = getc(wsk) != EOF)
{
if (ch == *argv[1])
ilosc++;
}
if (fclose(wsk) != 0)
{
puts("Blad zamkniecia pliku");
exit(1);
}
printf("%s %s %d\n", nazwa, argv[1], ilosc);
ilosc = 0;
puts("Podaj nazwe pliku do otwarcia");
}
}
getchar();
getchar();
return 0;
}
Program ma za zadanie pobierać z wiersza poleceń znak oraz nazwy plików do przeszukania. Jeśli użytkownik nie poda żadnej nazwy pliku to wtedy program prosi go o podanie nazwy pliku. Program przegląda pliki i zlicza ilość wystąpień tegoż znaku. I właśnie mam problem z tym zliczaniem. Wynikiem uruchomienia powyższego programu i wprowadzenia kilku nazw plików zawsze jest ilość = 0. I tutaj moje pytanie jak porównać znak występujący w pliku z drugim argumentem z wiersza poleceń (tym poszukiwanym znakiem). Błąd pewnie jest w tym fragmencie:
while (ch = getc(wsk) != EOF)
{
if (ch == *argv[1])
ilosc++;
}
Wiem, że w argv[] są przechowywane całe łańcuchy, a ja przyrównuje ten łańcuch z pojedynczym znakiem. Nie mam jednak bardzo pojęcia jakie zmiany wprowadzić aby wszystko było porównywane poprawnie.