Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2010, 00:07   #1
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию Возникла проблема считывания текстового файла

Программа создает 2 текстовых файла: in.txt, out.txt;
Причем в in.txt находится 2 столбца рандомных целых чисел, а в out.txt те пары чисел из них, что кратны друг другу.
Проблема заключается в том, что при считывании функцией fscanf построчно файла in.txt, числа первого столбца считываются не полностью, а только до последней цифры.. То есть, если имеем пару чисел:
23 45

То функция считает пару чисел
3 45
Код пересобирал кучу раз, всяко разно пытался, но так и не понял\не нашел причину неисправности.
Прошу помочь, заранее спасибо.

Собственно задание:
Код:
/*Случайным образом создать таблицу пар целочисленных значений и запи-сать её в текстовый файл в виде: 
     X               Y
     5                1
     8                2
     12              3
     11              4
     -                 -
Считать из файла пары значений и в тех из них, где Y кратен X, или X кра-тен Y, помесить в другой файл:
     X               Y . 
*/
А вот мой код:
Код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <conio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) 
{
	time_t t;
	srand(time(&t));
	setlocale(LC_ALL,"RUSSIAN");
	FILE *f_in,*f_out;
	
	int n=1000;
	if((f_in = fopen("in.txt","w+")) != NULL)
	{
		fprintf(f_in,"X\tY\n");
		for(int i=0;i<n;i++)
		{
			int a,b;
			a = rand()%100 ;
			b = rand()%100 ;
			fprintf(f_in,"%d\t%d\n",a,b);
		}

	}
	else printf("Возникла ошибка");

	f_out = fopen("out.txt","w+");

	fclose(f_in);

	if((f_in = fopen("in.txt","r")) != NULL)
	{
		int a,b;
		char ch;
		fscanf(f_in,"X\tY\n");
		while((ch=fgetc(f_in)) != EOF)
		{
			if((fscanf(f_in,"%d\t%d\n",&a,&b))!=NULL)
				if((a!=0)&&(b!=0)&&((a%b ==0)||(b%a==0)))
				{
					fprintf(f_out,"%d\t%d\n",a,b);
				}
		}
		printf("Заканчиваем\n");
		fclose(f_in);
		fclose(f_out);		
	}
	else printf("Возникла ошибка");

	return 0;
}
Aerial вне форума Ответить с цитированием
Старый 19.09.2010, 18:24   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Код:
while((ch=fgetc(f_in)) != EOF)
ты здесь извлекаешь очередной символ. Замени на :
Код:
while(!feof(f_in))
и все будет арбайтен
sashonk вне форума Ответить с цитированием
Старый 20.09.2010, 10:29   #3
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию

sashonk, спасибо большое
Aerial вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
потоки сохранение и считывания файла [C++] ArniLand Общие вопросы C/C++ 1 27.05.2010 23:27
Проблема с чтением и выводом содержимого текстового файла на экран -=PascaL=- Помощь студентам 16 08.08.2009 07:13
Помогите! язык c Тейлор + проблемы считывания файла AlinAA Помощь студентам 3 13.03.2009 22:34
Проблема с созданием текстового файла BuT@JL Помощь студентам 3 27.02.2009 18:04