Zapisywanie slow z pliku do zmiennych

0

Witam, mam oto takie zadanie:

Niech będzie dany plik tekstowy o nazwie dane.txt zawierający działania zapisane w postaci:
01010101 AND 11100111
1010101 Nand 1100111
010 OR 111
01010101 NOR 11100111
010101 xor 111001
NOT 11100111

Liczba zapisanych działań w pliku tekstowym dane.txt nie jest z góry znana.

Napisać program w ANSI C, który pobiera wszystkie działania (działanie po działaniu) do wykonania z pliku dane.txt i wypisuje je na ekranie wraz z wynikiem w postaci:
01010101 AND 11100111 = 01000101
itd.

Więc mam wczytywanie słowa po słowie z pliku


#include <stdio.h>

int main()
{
char slowo[10];

FILE *f = fopen("dane.txt", "r"); //r-read, czytanie z pliku f

while(fscanf(f, "%s", slowo) != EOF){
printf("%s ",slowo);
}

fclose(f);

return 0;
}

 

No to wymyśliłem sobie, że trzeba to zrobić zapisując, każde słowo w danej lini do oddzielnej zmiennej.
Tj. pierwszy i drugi ciąg bitowy to np. char ciag1[10], drugi char ciag2[10] i potem swobodnie porównywać operacje znak po znaku operacjami |, &, ! etc, w zależności czy string z 3 zmiennej , będzie równy OR, AND etc.

I tu napotykam problem. Jak pętla ma się kapnąć, do której zmiennej przyporządkować dane słowo, a potem jak zrobić aby dowiedziała się, że mamy znak końca linii i zacząć od nowa przypisywanie i porównywanie.

Chyba, że to moje myślenie jest złe i jest na to jakiś łatwy sposób o którym nie pomyślałem, bo ostatni raz bawiłem się w C z 2 lata temu i może coś mi umyka.

Za odpowiedzi z góry dziękuję!

0
char words[3][65]={{0},{0},{0}};
unsigned y=0,x=0;
int ch,inword=0;
while(feof(stdin)!=EOF)
  {
   ch=fgetc(stdin);
   if(ch=='\n')
     {
      if((x<64)&&(y<3)) words[y][x]=0;
      for(x=0;x<y;++x) printf( "%s",words[x]);
      printf("\n");
      y=x=words[0][0]=words[1][0]=words[2][0]=inword=0;
     }
   if((ch!=' ')&&(ch!='\t')) { if((x<64)&&(y<3)) words[y][x++]=inword=ch; }
   else if(inword) { if(y<3) x=words[y++][x]=inword=0; }
  }
0

Nie bardzo rozumiem, w którym momencie następuje przypisanie słowa do zmiennej. Może, źle wklepałem to w kod, ale drukuje mi tylko pierwsze wyrazy wiersza, a chyba powinno wszystkie 3 szukane.


#include<stdio.h>

int main() {
char words[3][65]={{0},{0},{0}};
unsigned y=0,x=0;
int ch,inword=0;
FILE *f = fopen("dane.txt", "r");
while(feof(f) != EOF)
  {
   ch=fgetc(f);
   if(ch=='\n')
     {
      printf("%s %s %s\n",words[0],words[1],words[2]);
      y=x=words[0][0]=words[1][0]=words[2][0]=inword=0;
     }
   if((ch!=' ')&&(ch!='\t')) { if((x<64)&&(y<3)) words[y][x++]=inword=ch; }
   else if(inword) { if(y<3) words[y++][x]=inword=0; }
  }

fclose(f);

return 0;
}


 

PS. A nie powinno tam być przypadkiem || zamiast && ?

1

Zabrakło: x= w x=words[y++][x]=inword=0;

0

Dalej coś jest nie tak jednak, drukuje coś takiego:

01010101 AND 11100111

1010101 Nand 11001111

010 OR 11101111

01010101 NOR 11100111

010101 xor 11100111

NOT 11100111

Właściwie zrobiłem cały program, i sugerowałem się tylko wynikami, nie patrząc, że źle drukuje. Próbowałem znaleźć rozwiązanie na własną rękę, ale nie wiem czemu tak dziwacznie drukuje.

Kod (samo czytanie):

 
#include<stdio.h>

int main() {
char words[3][65]={{0},{0},{0}};
unsigned y=0,x=0;
int ch,inword=0;
FILE *f = fopen("dane.txt", "r");
while(feof(f)!=EOF)
  {
   ch=fgetc(f);
   if(ch=='\n')
     {
      printf("%s %s %s\n",words[0],words[1],words[2]);
      y=x=words[0][0]=words[1][0]=words[2][0]=inword=0;
     }
   if((ch!=' ')&&(ch!='\t')) { if((x<64)&&(y<3)) words[y][x++]=inword=ch; }
   else if(inword) { if(y<3) x=words[y++][x]=inword=0; }
  }
fclose(f);

return 0;
}


0

Ok działa! Wielkie dzięki!

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