Премини към съдържанието
peeter

Програма на С

Препоръчан отговор


Здравейте колеги...В следната функция трябва да записва въведените числа по 2 на ред....ама незнам как ще стане това.Някой може ли да подскаже как ще станетова.Благодаря предварително!!

 

FILE*writeFile(char*filename)

{

FILE*fp;

int x,flag;

fp=fopen(fname,"w");

if (fp==NULL)

return NULL;

printf("Въведете цели числа!");

while(flag=scanf("%d",&x))!=EOF)

 if(flag!=1)

return NULL;

if ((fprintf(fp,"%dn",x))==EOF)

return NULL;

}

fclose(fp

return fp;

}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

...

Здравейте !

 

Ако метода по-горе в момента върви и работи правилно, то можете да ползвате следната корекция:

FILE* writeFile(char* filename){	FILE* fp;	int x,flag;	fp=fopen(fname,"w");	if (fp==NULL)	        return NULL;	printf("Въведете цели числа!");	int lineBreaker = 0;	while(flag=scanf("%d",&x))!=EOF)	{  		if(flag!=1)			return NULL;		if ((fprintf(fp,"%d ",x))==EOF)//Една шпация за разделя на числата е добавена			return NULL;		if ((++lineBreaker)%2 == 0)		{			fprintf(fp,"n");		}	}	fclose(fp);	return fp;}

Но имам няколко забележки от чисто професионален тип:

 

1) Прочетете отново какво връщат методите scanf и fprintf - начина по който ги ползвате и правите проверки е меко казано странен за мен.

2) Връщане на NULL дори и при неуспешен запис на данна е доста груб начин за излизане от метода. Едва ли не означава, че "проваляте" цялата логика на изпълнение до момента. Или върнете код за грешка или игнорирайте опита за запис. 

3) След връщането на NULL, това нещо:

fclose(fp);

никога не се изпълнява. Опасно е да оставяте потоци към файлове в този вид. Най-малкото при опит за последващо четене/писане има голям шанс да се получи грешка.

4) Записа на този ред 

FILE*writeFile(char*filename) 

трябва да бъде с поне една шпация от ляво или отдясно на символа за указател:

FILE* writeFile(char* filename) 

5) Форматирайте кода си - 20-25 реда не са проблем, но ако Ви пейстна 1500+ реда, ще се видите в чудо за какво иде реч - ползвайте подходящите тагове, налични във форума.

 

Поздрави !

Редактирано от soundtracker (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

И аз искам да допълня с няколко коментара.

1. Параметърът въведен тук FILE* writeFile(char* filename) трябва да отговаря като име на променлива на реда където се отваря файла. Т.е.

FILE* writeFile(char* filename){    ...    fp=fopen(filename,"w"); // Тук е сменено името на променливата, за да отговаря на параметъра на функцията    ...}

2. Това може и да не излезе на кирилица в конзолата:

printf("Въведете цели числа!");

Зависи от някои неща, но все пак, ако работи, не го променяйте!

Редактирано от Bfaf (преглед на промените)
  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.