Nieoczekiwane nadpisywanie tablicy w C

0

Witam,

mam za zadanie napisać program który otwiera 2 pliki tekstowe i wypisuje w pierwszym wierszu,pierwszy wiersz z pierwszego pliku oraz pierwszy wiersz z drugiego pliku,potem przechodzi do drugiego itd itd.
Np:

Plik1:
Ala
Ola

Plik2:
ma kota
nie ma psa

Powinno zwrócić na stdout:
Ala ma kota
Ola nie ma psa

Przy czym mój program,nadpisuje dane i wychodzi:
Ala kota
Olae ma psa

O co chodzi? Na początku probowałem uzyć funckji strcat(),ale po wielu nieudanych próbahc postanowiłem wsyztsko zrobić po kolei,litera po literce,uzywając tab_3.Niestety i to nie pomogło.Ktoś pomoże? Nie mam już sił ;(

Kod: (nazwy 2 plików są pobierane z wiersza polecen,jako argumenty funckji main() )

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main(int argc,char** argv){
FILE * stream_1;
FILE *stream_2;
stream_1=fopen(argv[1],"rb");
stream_2=fopen(argv[2],"rb");

char *status_1;
char *status_2;
while(1){
    char temp_1[100],temp_2[100],temp_3[205],sign;
    int i=0,j=0;
    status_1=fgets(temp_1,99,stream_1);
    status_2=fgets(temp_2,99,stream_2);
    if((status_1==NULL)&&(status_2==NULL)) break;
    if(status_1!=NULL && status_2!=NULL) {

            while(temp_1[i]!='\n' && temp_1[i]!='\0') {temp_3[i]=temp_1[i]; i++;}
            temp_3[i++]=' ';
            while(temp_2[j]!='\n' && temp_2[j]!='\0') {temp_3[i]=temp_2[j]; i++; j++;}
            temp_3[i]='\0';
            puts(temp_3);
                                         }

    else if (status_1==NULL) fputs(temp_2,stdout);
         else fputs(temp_1,stdout);
    putchar('\n');
}

return 0;
}
 
0

Może w drugim wierszu jako pierwszy znak masz powrót karetki. Sprawdź to w debugerze. Może to nie jest problem ;'D

Po co pisać kod w blokach, jak można cały kod programu wsadzić w warunku sprawdzającym, i tak tylko ostatnie wyrażenie jest brane pod uwagę jako wartość wyrażenia. A może jeszcze lepiej umieścić cały kod w #define?

Uhuhu, ależ pomyłka. Kod pisany w jednej linii. To od razu zacznij pisać zamiast (status_1==NULL) to (status_1). Może będzie krótszy kod wykonywalny ;'D

0

Odkryłem właśnie przed chwilą że w cześci kodu:

  while(temp_1[i]!='\n' && temp_1[i]!='\0') {temp_3[i]=temp_1[i]; i++;}
            temp_3[i++]=' ';
            puts(temp_3);

tuż po wyjsciu z pętli while() zmienna "i" się zeruje,tak ze znak spacji jest zapisywany z powrotem na początek (do tab_3[0]).
Może to w czymś pomoże.

0

O kurde, faktycznie coś musi być z tym powrotem karetki.
Bo jak zmieniłem tryp w funkcji fopen() na niebinarny to nagle wszytsko działa :D

Co do drugiej części wypowiedzi,powiedz proszę ,chodzi o to,że nie napisałem programu w funkcjach tylko wszytsko się zlewa/jest nieczytelne? NIe mam za duzo doświadczenia w programowaniu,a uczę się sam więc chętnie posłucham każdej wskazówki.

Z góry dzięki !

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