Tam Sürümünü Görmek İçin : C de dosya işlemleri
arkadaşlar bir text dökümanı oluşturdum.İçinde şu şekilde sayılar var
15
56
89
63
63
87
45
12
programın buradaki sayıları bir array da tutması gerekiyor
böyle bir kod yazdım ama sorun var!
ben sorunu bulamıyorum
bakabilir misiniz ?
#include<stdio.h>
#include<stdlib.h>
int s[8]={0};
int main()
{
FILE *di;
char a;
char z[3];
if((di=fopen("input.txt","r"))==NULL)
{
printf("Error\n");
return -1;
}
else
{
for(int i=0;i<8;i++)
{
a=fgetc(di);
for(int j=0;j<3;j++)
{
if(a!='\0' && a!='\n')
{
z[j]=a;
a=fgetc(di);
}
}
(s[i]=atoi(z));
}
}
return 0;
}
golgepapaz
14/05/2007, 01:05
sorun var ama sorunu bulamiyorsun? Nasil oluyor peki yani yan etki olarak ne oluyor, array dolmuyor mu? yarisi mi doluyor? dosyayi hic mi okumuyor?biraz daha aciklayici olursan biz de daha yardimsever oluruz... :)
Bu arada kodda bir sIkIntI goremiyorum....Eger dosyan dogru formattaysa yani
15CRLF
56CRLF
....
seklinde gidiyorsa yazdigin kod calisir....
#include<stdio.h>
#include<stdlib.h>
int s[20]={0};
int main()
{
FILE *di;
char a;
char z[3];
if((di=fopen("input.txt","r"))==NULL)
{
printf("Error\n");
return -1;
}
else
{
for(int i=0;i<20;i++)
{
a=fgetc(di);
for(int j=0;j<3;j++)
{
if(a!='\0' && a!='\n')
{
z[j]=a;
a=fgetc(di);
}
}
(s[i]=atoi(z));
}
}
for(int w=0;w<20;w++)
printf("%d\n",s[w]);
return 0;
}
diyelim ki kod yukarıdaki gibi aşağıda da benim inputlarım var.
array i başlangıçta düzgün doldurmaya başlıyor.
ama 18. elemanının değerini 19 da yazıyor(ilk olarak burada hatayla karşılaşıyorum)
ve sonra düzgün okumaya devam ediyor diyorum ki birkaç yerde daha bölgesel hatalar var
089
102
100
105
103
006
003
005
004
005
006
001
000
003
004
001
000
002
004
002
golgepapaz
14/05/2007, 01:17
089
102
100
105
103
006
003
005
004
005
006
001
000
003
004
001
000
002
004
002
input setin bu mu?
başlangış kısmı bu
17 nin verisini 18 e de yazıyor.
sonra düzgün çalışmaya devam ediyor
ara ara yine aynısı yapmış
quasimodo
14/05/2007, 01:23
fscanf() i kullansan
golgepapaz
14/05/2007, 01:26
hayir bu settede bir sorun yok? 17 dedigin hangi deger? 0 dan mi basliyorsun saymaya?
golgepapaz
14/05/2007, 01:28
if(a!='\0' && a!='\n')
&& yerine || yapsan ?
bence yapmasin :)
quasimodo
14/05/2007, 01:29
bence yapmasin :)
bencede :)
089
102
100
105
103
006
003
005
004
005
006
001
000
003
004
001
000
002
004
002
bu benim inputum ise
acaba doğru mu okumuş giye printf ile kontrol ediyorum
for(int w=0;w<20;w++)
printf("s[%d]=%d\n",w,s[w]);
sonuç
S[0]=89
s[1]=102
s[2]=100
s[3]=105
s[4]=103
s[5]=6
s[6]=3
s[7]=5
s[8]=4
s[9]=5
s[10]=6
s[11]=1
s[12]=0
s[13]=3
s[14]=4
s[15]=1
s[16]=0
s[17]=2
s[18]=2
s[19]=4
üşenmedim yazdım:)
s[18]=4 ve s[19]=2 olmalı
şimdi aslında inputlar uzuyor dediğim gibi
s[20]=2 yapıyor ve doğru devam ediyor
ama yer yer aynı sorun var!
quasimodo
14/05/2007, 01:39
for(i = 0; i < 8; i++) {
a = fgetc(di);
for(j = 0; j < 3; j++){
if(a == '\0' || a == '\n' || a == '\r')
break;
z[j] = a;
a = fgetc(di);
}
s[i] = atoi(z);
}
golgepapaz
14/05/2007, 01:41
ok hem g++ ile hem visualC 8.0 la derleyip calistridim....
sonuc
s[0]=89
s[1]=102
s[2]=100
s[3]=105
s[4]=103
s[5]=6
s[6]=3
s[7]=5
s[8]=4
s[9]=5
s[10]=6
s[11]=1
s[12]=0
s[13]=3
s[14]=4
s[15]=1
s[16]=0
s[17]=2
s[18]=4
s[19]=2
for(i = 0; i < 8; i++) {
a = fgetc(di);
for(j = 0; j < 3; j++){
if(a == '\0' || a == '\n' || a == '\r')
break;
z[j] = a;
a = fgetc(di);
}
s[i] = atoi(z);
}
aynı hatayı veriyor
ok hem g++ ile hem visualC 8.0 la derleyip calistridim....
sonuc
s[0]=89
s[1]=102
s[2]=100
s[3]=105
s[4]=103
s[5]=6
s[6]=3
s[7]=5
s[8]=4
s[9]=5
s[10]=6
s[11]=1
s[12]=0
s[13]=3
s[14]=4
s[15]=1
s[16]=0
s[17]=2
s[18]=4
s[19]=2
visual studio 6.0 da çalışıyorum,
bende neden böyle bir hata olabilir
golgepapaz
14/05/2007, 01:50
for(i = 0; i < 8; i++) {
a = fgetc(di);
for(j = 0; j < 3; j++){
if(a == '\0' || a == '\n' || a == '\r')
break;
z[j] = a;
a = fgetc(di);
}
s[i] = atoi(z);
}
bunun diger koddan bir farki yokki, o eger okudugu karakter kontrol karakteri ise bloga girmiyor, sen kontrol karakter iise girip dongu yu kiriyorsun...
golgepapaz
14/05/2007, 01:56
visual studio 6.0 da çalışıyorum,
bende neden böyle bir hata olabilir
hic bir fikrim yok,debug etmeyi denesene kodu. yada kullandigin dosyayi h-sol-ter.@g-mail.com (tireleri cikart) a bir gonder, ben ondan supheleneyiorum dogrusu...
quasimodo
14/05/2007, 01:58
for(i = 0; i < 8; ++i)
fscanf(di, "%d", &s[i]);
golgepapaz
14/05/2007, 02:14
evet tahmin ettigim gibi gonderdigin dosyada hata var 18inci satirda ki 002 den sonra fazladan bir bosluk var... yani soyle gidiyor...
001CRLF
000CRLF
002 CRLF //2 den sonra bosluk var.....
004CRLF
002CRLF
CRLF
CRLF
CRLF
Eger dosyayi whitespaceleri gosteren bir programla acarsan sende farkedeceksin (mesela Notepad++). programi calistirinca senin aldigin outputu aldim...eminim diger sorunlarda ayni sebepten meydana geliyorlar...ayrica dosyanin sonunda da bir suru bos satir var(CRLF satir sonunu isaret eder)
evet tahmin ettigim gibi gonderdigin dosyada hata var 18inci satirda ki 002 den sonra fazladan bir bosluk var... yani soyle gidiyor...
001CRLF
000CRLF
002 CRLF //2 den sonra bosluk var.....
004CRLF
002CRLF
CRLF
CRLF
CRLF
Eger dosyayi whitespaceleri gosteren bir programla acarsan sende farkedeceksin (mesela Notepad++). programi calistirinca senin aldigin outputu aldim...eminim diger sorunlarda ayni sebepten meydana geliyorlar...ayrica dosyanin sonunda da bir suru bos satir var(CRLF satir sonunu isaret eder)
aynen öyleymiş.
teşekkürler
golgepapaz
14/05/2007, 02:26
aynen öyleymiş.
teşekkürler
bisiy digil :)
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.