Skocz do zawartości

[C]Program w C i mały problem...


ikar_

Polecane posty

Witam :)

 

Napisałem prosty kod w C. :D Niestety program wysypuje się przy próbie zapisu danych do pliku tekstowego, a ja nie wiem dlaczego tak się dzieje.... dlatego zwracam się do was o pomoc :rolleyes:

Czy ktoś mógłby wytłumaczyć mi w czym tkwi problem i jak go rozwiązać/ ew. poprawic istniejacy kod ? :)

W dodatku przy wczytywaniu nr albumu program podaje jakieś kosmiczne dane, tzn nie wyświetla wprowadzonego nr. a zupełnie inny ciąg cyfr :( Czy to może dla tego, że nie czyszczę bufora??

 

ehh... po małych modyfikacjach przestał również otwierać i wczytywać dane z istniejącego już pliku... <_<

 

KOD

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main()

{

FILE *whatever;

char plik[15];

char imie[21];

char nazwisko[31];

int album[10];

 

printf("\nPodaj nazwe pliku: ");

gets(plik);

 

 

if((whatever=fopen(plik,"txt,r"))!=NULL)

{

fscanf(whatever,"%s %s \n%d",&imie, &nazwisko, &album);

printf(whatever,"%s %s \n%d", imie, nazwisko, album);

//fprintf(whatever,"%s %s \n\t\t %d", imie, nazwisko, album);

/* zostawiajac tylko ta instr. programpowinien wczytywac dane bezposr z pliku z pom bufora.. ??

wolalbym aby tak wlasnie robil*/

fclose(whatever);

}

else

{

whatever=fopen(plik,"txt,w");

printf("\nPodaj Imie i Nazwisko: ");

scanf("%s %s", &imie, &nazwisko);

printf("\nPodaj Nr. albumu: ");

scanf("%d", &album);

printf("\n\n\tWprowadziles: Imie: %s \n\t\t\tNazwisko: %s \n\t\t\tAlbum: %d", imie,nazwisko,album);

fprintf(whatever,"%s %s %d", imie, nazwisko, album);

fclose(whatever);

 

}

system("PAUSE");

return 0;

}

 

 

Ogólnie program miał po wpisaniu nazwy pliku:

1. jeśli plik zewnętrzny istnieje - wczytać dane i wyświetlić je na ekranie,

2. jesli nie istnieje, utworzyć plik i zapisać w nim podane dane....

 

Ktoś wie dlaczego tak się dziej?

 

Ja tymczasem biegnę już na jakąś górę, by moc z niej dziękować :D

Link do komentarza
Udostępnij na innych stronach

A kiedy się wysypuje? w której linijce?

 

 

wysypuje się gdy ma wykonać instrukcję(żółta strzałka przechodzi do tej linijki):

KODfprintf(whatever,"%s %s %d", imie, nazwisko, album);

 

 

w jaki sposób naruszyłem regulamin forum, bo nie bardzo rozumiem...?? :mellow:

Link do komentarza
Udostępnij na innych stronach

CYTAT(ikar_ @ nie, 20 kwi 2008 - 17:47)

Napisałem prosty kod w C. :D Niestety program wysypuje się przy próbie zapisu danych do pliku tekstowego, a ja nie wiem dlaczego tak się dzieje.... dlatego zwracam się do was o pomoc :rolleyes:

 

 

to wina tych funkcji:

 

1. fprintf(whatever,"%s %s %d", imie, nazwisko, album);

 

2. fscanf(whatever,"%s %s \n%d",&imie, &nazwisko, &album);

 

należy je zastąpić następującymi:

 

1. fwrite(&imie,sizeof(imie),1,whatever);

 

2. fread(&imie,sizeof(imie),1,whatever);

 

W dodatku przy wczytywaniu nr albumu program podaje jakieś kosmiczne dane, tzn nie wyświetla wprowadzonego nr. a zupełnie inny ciąg cyfr :(

 

to dlatego, ze użyłeś tablicy (int album[10];), a traktowałeś ją jak pojedńczą zmienną,

 

powinno być: int album;

 

KOD

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

 

int main()

{

FILE *whatever;

char plik[15];

char imie[21];

char nazwisko[31];

int album;

 

printf("\nPodaj nazwe pliku: ");

gets(plik);

if((whatever=fopen(plik,"r"))!=NULL)

{

fread(&imie,sizeof(imie),1,whatever);

fread(&nazwisko,sizeof(nazwisko),1,whatever);

fread(&album,sizeof(album),1,whatever);

printf("\nImie: %s",imie);

printf("\nNazwisko: %s",nazwisko);

printf("\nNumer telefonu: %d\n",album);

fclose(whatever);

} else

{

whatever=fopen(plik,"w");

printf("\nPodaj Imie i Nazwisko: ");

scanf("%s %s", &imie, &nazwisko);

printf("\nPodaj Nr. albumu: ");

scanf("%d", &album);

printf("\n\n\tWprowadziles: Imie: %s \n\t\t\tNazwisko: %s \n\t\t\tAlbum: %d", imie,nazwisko,album);

 

fwrite(&imie,sizeof(imie),1,whatever);

fwrite(&nazwisko,sizeof(nazwisko),1,whatever);

fwrite(&album,sizeof(album),1,whatever);

fclose(whatever);

}

system("PAUSE");

return 0;

}

 

 

Pozdrawiam!

Link do komentarza
Udostępnij na innych stronach

Wielkie dzięki za pomoc xevil21

Na zajęciach nie używaliśmy takich funkcji jak:

KOD

fread

fwrite

 

prawdę mówiąc to pierwszy raz je widzę, ale już poczytałem o nich na http://pl.wikibooks.org

nie do końca tylko zrozumiałem o co chodzi z tym sizeof.... gdybyś mógł mi jakoś prościej wytłumaczyć jaką on tutaj role spełnia...? :)

 

Jeśli chodzi o ten regulamin.... chciałem zmienić znaczniki z


na [cpp][/cpp] (bo o to chyba chodziło) ale był jakiś problem i zmiany nie chciały się załadować....

Link do komentarza
Udostępnij na innych stronach

na końcu programu dodałem jeszcze fragment kodu i chciałem go zapętlić, ale moje próby nie dawały oczekiwanych rezultatów :(

 

KOD

printf("\n\n\t\t\tODCZYT DANYCH\n\n\n");

printf("\nPodaj nazwe pliku do odczytu: \n");

gets(plik);

if((whatever=fopen(plik,"r"))!=NULL)

{

 

fread(&imie,sizeof(imie),1,whatever);

fread(&nazwisko,sizeof(nazwisko),1,whatever);

fread(&album,sizeof(album),1,whatever);

printf("\n\tImie: %s",imie);

printf("\n\tNazwisko: %s",nazwisko);

printf("\n\tNumer albumu: %d\n\n",album);

fclose(whatever);

}

else{

printf("\nPlik nie istnieje");

}

 

używałem pętli "do...while..." ale nieodpowiednio definiowałem warunek, bo gdy podawałem istniejącą nazw pliku to program wyświetlał jego zawartość, a następnie prosił o ponowne podanie nazwy... i tak w kółko :/ a przy nieistniejącej się zamykał... amiało być odwrotnie

przy pętli for, właściwie nie wiem jak jej tu użyć bo moje wszelkie próby konczą sie na komunikacie "wcisnij dowlny klawisz.."

Jak mogę wykorzystać do tego zwracaną wartość instr. for? Wiem, że gdy otwiera plik to zwraca 1, gdy sie to nie uda zwraca 0.

 

oczywiscie stworzyłem dodatkową zmienna int

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...