Obsługa plików zadanie

0

język C
1 Napisz program, który pobiera od użytkownika znak i sprawdza, czy występuje on w ciągu
zapisanym w pliku tekstowym.
2. Zmodyfikuj poprzedni program tak, aby zliczał on liczbę wystąpień znaku podanego przez
użytkownika w ciągu zapisanym w pliku tekstowym.

mam problem z funkcja w 1 zadaniu i stoje w miejscu od kilku dni nie mam pojęcia jak się do tego zabrać pomocy

1

Z czym konkretnie masz problem? Pobraniem znaku? Sprawdzeniem czy występuje w ciągu? Najlepiej pokaż co masz na razie.

0
#include <stdio.h>
#include <conio.h>
int main()
{
    char* kn;
    printf("podaj znak : ");
    gets(kn);
    printf("%s", kn);
    FILE* plik;
    char zn;
    plik = fopen("plik_t1.txt", "r");
    //od tego momentu nie wiem jak napisac reszte
    while ((zn = getc(plik)) != EOF) {
        if (kn == zn)
    }
    fclose(plik);
    return 0;
}

chodzi zeby po funkcji while sprawdzal czy sie znajduje ten znak w pliku

1

Już prawie wszystko masz! Utwórz sobie nową zmienną - counter, której początkową wartość ustalisz na 0, i którą będziesz zwiększał o jeden za każdym razem gdy napotkasz znak (czyli w tym ifie na obecnej linii 14). I to wszystko.

0

screenshot-20201217121110.png

mam taki błąd mi wyskakuje i ne o co chodzi

2

Ach, wczytujesz ciąg znaków (%s), a chcesz znak. Zmień typ kn na char i wczytuj %c.

Ponadto: zauważ gdzie umieściłeś counter++ - przecież inkrementować chcesz wyłącznie gdy znak się zgadza, a nie każdy znak w pliku.

3

@Jakubczak awm:
Tak na przyszłość.
Zamiast zamieszczać te obrazki z Dev C++ (które razi większość z nas), kopiuj wklej tekst kodu, oraz tekst z zakładki "Log kompilacji".
nawet tobie będzie tak wygodniej.

0

int main()
{
char znak1;
printf("Podaj znak");//pobiera znak od uzytkownika
scanf("%c",znak1);
FILE ws;//wskaznik na plik
char znak;
ws = fopen ("plik_t1.txt","r");//otwiera opik
while(znak!=EOF)
{
znak=fgetc(ws);
if(znak=znak1)
printf("OK");
else
printf("NO");
}
fclose(ws);
getche();
return 0;
}

mam problem z tym programem , sprawdza czy podany znak jest w pliku i program zatrzymuje sie na podaniu znaku, nie wiem jak ten ptoblem rozwiazac

1

scanf("%c",&znak1);
if(znak==znak1)

0

dziekuje ale teraz wyswietla mi sie OKNO po odpaleniu programu, jak znak jest w pliku a jak nie ma to NONO

1

Po każdym wczytanym znaku coś wypisujesz, więc czego oczekiwałeś?

0

a jak to zrobić żeby tylko raz sprawdziło czy jest te znak a nie wypsywało po każdym znaku i nie sprawdzało ENTERA

1

Zapisać informacje do zmiennej, wypisywać po pętli.

int występuje=0;
while(...)
{
   if(...) występuje=1;
}
printf(występuje?"Yes":"No");
0

int main() {
char q,w,e,r,t,y,u,i,o,p;
char znak;
int litery;//zmienna liter

FILE *plik; //wskaznik na plik 
plik=fopen("plik_t1.txt","r");//otwarcie pliku
if(plik==NULL){//jezeli plik bedzie pusty to funkcja to sprawdzi
    printf("Plik jest pusty");
   
}
while((znak=fgetc(plik))!=EOF)
{
			 if('q' <= znak){//funkcja sprawdzenia malych liter od a do z
    		 q++;//jesli funkcja sie spelni dodaje do zmiennej 1
			 }   
}

printf("%d liter",q); //wypisuje wyniki
fclose(plik);//zamyka plik
return 0;

jak zrobic w prostszy sposb zeby liczyło wszytskie litery alfabetu bo takie funkcje dla kazdej litery nie chce mi sie robic

0

Zapisać do tablicy

if(isalpha(znak))
{
    if(isupper(znak)) ++tb[znak-'A'];
    else if(islower(znak)) ++tb[znak-'a'];
}
0

int main()

{

char alfabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','q','p','r','s','t','u','w','x','y','z'};
char znak;

int i=0;

int litery_male=0;

FILE *plik; 

plik=fopen("plik_t1.txt","r");//otwarcie pliku

if(plik==NULL)//jezeli plik bedzie pusty to funkcja to sprawdzi
		{

    	printf("Plik jest pusty");       

		 }
while((znak=fgetc(plik))!=EOF)

		{
	
	
		  }	      

printf("%d malych liter",litery_male); //wypisuje wyniki
fclose(plik);//zamyka plik

return 0;

}

mam problem z napisaniem funkcji do liczenia liter, nie ma znaczenia czy to mała czy duża tzn A = a

0

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

int main()
{
char alf[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','q','p','r','s','t','u','w','x','y','z'};

char znak;

int tb[30];

char q;

int j;

int litery;  

FILE *plik; 

plik=fopen("plik_t1.txt","r");

if(plik==NULL)

		{
    	printf("Plik jest pusty");       
		 }
while((znak=fgetc(plik))!=EOF)
		{
			if(isalpha(znak))
					{
				 if(isupper(znak)) ++tb[znak-'A'];
				else if(islower(znak)) ++tb[znak-'a'];
			
					}
					
		}

printf(..........); //wypisuje wyniki
fclose(plik);//zamyka plik

return 0;

}
co mam napisac w wynikach zeby to mialo rece i nogi czy cos jeszcze poprawic

0

Brakuje deklaracji tablicy int tb['Z'-'A'+1]={0};

0

mam problem z zapisu do pliku z funkcji for, wyswietla mi sie nieznany blad oto fukncja a blad to [Error] cannot convert 'const char*' to 'FILE* {aka _iobuf*}' for argument '1' to 'int fwprintf(FILE*, const wchar_t*, ...)'

for (int i=0; i<26; i++){//petla for do wypisania wynikow
  
	fwprintf("%c: %d i wsytapilo z czestotliwoscia %5.2f%% \n",i+'A',tb[i],(float)tb[i]/a*100);  //wypisuje wyniki i pokazuje z jaka czestotliwoscia wystepuje   
   }

    fclose(plik);//zamyka plik

    return 0;
0

Używasz fwprintf, które - jak nazwa wskazuje - jest dla typów wchar. Użyj odpowiedniej funkcji - fprintf (albo printf, skoro żadnego pliku nie używasz)

0

Nadal wyświetla mi się ten bład a nie wiem jak go ominac

1

Pierwszy argument, to ma być obiekt FILE* (czyli zmienna plik), której nie podajesz. Wczytaj się w treść błędu to ogarniesz.

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