ورود

View Full Version : سوال: fscanf و getc



shaaadi
پنج شنبه 29 بهمن 1388, 11:56 صبح
من میخوام یک برنامه بنویسم که از فایل بخونه ... می نویسم اما درست کار نمیکنه ! یعنی getc به جای این که کاراکتر برگردونه -1 را بر میگردونه ! چرا ؟ اخه مگه مقدار بازگشتی getc همون کاراکتر نیست ؟







#include<stdio.h>
#include<conio.h>
main()
{
char t;
FILE *fb=fopen ("shadi.txt" , "a");


if (feof (fb))
{
printf ("cannot open file \n") ;
return 0;
}


for (int i=0;i<=20;i++)
{
t=getc(fb);
printf("%c",t);
}
fclose(fb);
return 1 ;
}





با fscanf هم می نویسم چرت و پرت پرینت میکنه ! البته می دونم که اشتباه می نویسم اما نمی دونم درستش چیه ؟ !!




#include<stdio.h>
#include<conio.h>
main()
{
char *t;
FILE *fb=fopen ("shadi.txt" , "a");


if (feof (fb))
{
printf ("cannot open file \n") ;
return 0;
}


for (int i=0;i<=20;i++)
{
fscanf(fb,"%c",&t);
printf("%c",t);
}
fclose(fb);
return 1 ;
}




اصلا fscanf و fprintf با getc و fputc چه فرقی می کنه ؟

pegetive_2010
پنج شنبه 29 بهمن 1388, 12:48 عصر
چرا متغیر t رو از نوع رشته تعریف کردی؟؟؟این اشتباهه.باید به جای char *t بنویسی char t.در واقع تو t رو از نوع رشته تعریف کردی و داری با دستور %c چاپش میکنی...رشته ها با s% چاپ میشن.
پس وقتی t رو کاراکتر تعریف کردی نمیخواد دستور printf رو عوض کنی.
اگه مشکلی هست بازم بگو...

shaaadi
پنج شنبه 29 بهمن 1388, 12:56 عصر
درست میگید ... اونو عوض کردم اما بازم یک سری خط های الکی چاپ میکنه... یعنی در t (-52) می ریزه !
در مورد اولی چی؟ اون چرا این طوری می کنه ؟اولی به تعداد 20 تا جای خالی چاپ میکنه !
(مرسی از جوابتون !)

pegetive_2010
پنج شنبه 29 بهمن 1388, 13:03 عصر
1 بار فایلتون رو به جای "a" با "r" باز کنین...

shaaadi
پنج شنبه 29 بهمن 1388, 13:10 عصر
خیلییییییییییییی خیلی ممنون !!!!!! درست شد ! فقط متوجه نشدم که a چه اشکالی داره ؟

lvlina_r
پنج شنبه 29 بهمن 1388, 13:27 عصر
خیلییییییییییییی خیلی ممنون !!!!!! درست شد ! فقط متوجه نشدم که a چه اشکالی داره ؟
مد "َa" برای اضافه کردنه، واسه همین به آخر فایل اشاره می کنه و هیچی نمی خونه، ولی مد "r" برای خوانده ، و از اول فایل شروع به خواندن می کنه

pegetive_2010
جمعه 30 بهمن 1388, 09:54 صبح
وقتی یه فایل رو با مد "a" باز میکنین یعنی APPEND میکنین پس در واقع cursor از اونجا که هست شروع میکنه به append کردن...و در واقع کاری به محتویات فایل شما نداره...append گونه ی کامل شده ی "w" یا همون write هست.با این فرق که به محض اینکه فایلی رو با "w" باز کنین تمامی محتویات فایل پاک میشن...ولی append علاوه بر این که تووی فایل مینویسه کاری به محتویات نداره.
وقتی با "r" باز کنین دارین برای خواندن امادش میکنین و محتویات فایل بدون دست خوردن با getc یا fscanf (که سرعت getc بیشتره البته) خوانده میشه...