Я думаю, что этот код должен работать. Введите два символа одновременно #: (# - пробел), затем введите
#include<stdio.h>
#include<string.h>
void wtf() {
FILE *f = fopen("podatoci.txt", "w");
char c;
while((c = getchar()) != '#') {
fputc(c, f);
}
fclose(f);
}
int main()
{
// wtf();
// getchar();
char z1, z2, c;
FILE *f;
f=fopen("podatoci.txt", "r");
int flag=0;
printf("enter chars : ");
// scanf(" %c %c", &z1, &z2);
// printf("chars are |%c| |%c|",z1,z2);
char name[3];
fgets(name, 3, stdin);
// printf("chars are |%c| |%c|",name[0],name[1]);
char buffer[512]; // I suppose 512 is enough (see Two problems below)
int i=0;
while((c=fgetc(f))!=EOF){
/* Different problems :
1 : you have a 'space' followed by 'end of line' before ':'
example you have a space before 54 but end of line before :
So you could not display characters when a 'space' is a found.
You have to use a temporary buffer
2 : you have to reset your flag at the end of line
3 : If you have ':' alone, do not printf("\n")
4 : If you have a 'space' after the first 'space', it must be printed
example : Maja Majovska
^ (this space)
*/
if(c=='\n') { // Address pb 2
flag=0;
i=0;
continue;
}
if(!flag&&c==name[0]){ // Address pb 4
flag=1;
continue;
}
if(flag&&c==name[1]){ // Address pb 3
flag=0;
buffer[i]='\0'; // end of string
printf("%s\n",buffer);
i=0;
}
if(flag)
buffer[i++]=c; // Address pb 1
}
fclose(f);
return 0;
}
Некоторые замечания:
Большинство объяснений есть в комментариях к коду (вы можете удалить их после прочтения)
Я использую fgets вместо scanf (https://stackoverflow.com/a/1248017/7462275)
Я делаю так, чтобы код был как можно ближе к исходной форме. Но я думаю, что было бы лучше получать текст построчно и использовать строковые функции (string.h). Например, чтобы напечатать первую подстроку между двумя символами (проверки на исправность не выполняются: эти два символа должны быть в строке)
while((fgets(buffer,512,f))!=NULL){
i=strchr(buffer,name[0]);
*(strchr(i,name[1]))='\0';
printf("%s\n",i);
}