Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Считывание чисел из файла в Си / 14 сообщений из 14, страница 1 из 1
04.08.2005, 08:54
    #33200734
optimizm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
Есть такой код. Считываю из файла значения, перевожу их в long и далее надо с ними манипулировать. Но что то происходит не так. Пытаюсь вывести считываеимые значения и получаю странные числа. Подскажите плиз в чем дело?
while (fgets(buf,10,fin)!=NULL)
{
nls=atol(buf);
fprintf(fout,"%9lu\n",nls);
fprintf(fout,"%s\n",buf);
}

Вот часть данных из считываемого файла
167
2174
23732
24445
99520
102079

Вот что на них выводится.
167
167
0


2174
2174
0


23732
23732
0


24445
24445
0


4294935744
99520
0


4294938303
102079
0
...
Рейтинг: 0 / 0
04.08.2005, 10:22
    #33200904
Monoceros
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
эх, тяжко без Си под рукой что-либо тут говорить... но я вот в толк взять никак не могу зачем тебя последний fprintf нужен?
...
Рейтинг: 0 / 0
04.08.2005, 10:31
    #33200925
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
В приведенном коде все в порядке. Следовательно, ошибочный код где-то выше. Надеюсь, что переменная buf определена образом:
Код: plaintext
char buf[ 10 ];

а НЕ char* buf;

ну, и еще возможно дело в том, как ты открываешь in/out файлы.
...
Рейтинг: 0 / 0
04.08.2005, 10:44
    #33200966
optimizm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
FILE *fout1;
FILE *fin;
пробовал и так
char *buf;
и так
char buf[10];
результат один.
Открытие файлов.
if ((fout1=fopen("doSpPorv.txt","wt")) != NULL);
else{
printf("\nОшибка пpи откpытии файла doSpProv.txt\n");
return(0);
}

if ((fin=fopen("a.txt","rt")) != NULL);
else{
printf("\nОшибка пpи откpытии файла a.txt\n");
return(0);
}
Два fprintf для проверки. Т.е. buf вроде верно выходит, а nls как то не так начиная вот с этих данных
4294935744 nls
99520 buf
...
Рейтинг: 0 / 0
04.08.2005, 10:53
    #33200986
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
Чего-то ты недоговариваешь :)
код с виду рабочий.
А требование насчет "только C" жесткое?
Может лучше С++ и потоки? Удобней гораздо:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#include <iostream> 
#include <fstream>

void ReadFILE(FILE* fin);
void ReadIFS(std::ifstream &ifs);

using namespace std;

void ReadFILE(FILE* fin)
{
	printf("ReadIFS\n");
	char buf[ 16 ];
	long nls =  0 ;
	while (fgets(buf, 10 ,fin)!=NULL)
	{ 
		nls=atol(buf); 
		printf("%9lu\n",nls);
		printf("%s\n",buf);
	}

}

void ReadIFS(ifstream &ifs)
{
	cout << "ReadIFS" << endl;
	long nls =  0 ;
	while(ifs >> nls)
		cout << nls << endl;
}

int main(int argc, char *argv[])
{
	if(argc >  1 )
	{
		FILE *fin = fopen(argv[ 1 ], "r");
		ReadFILE(fin);
		fclose(fin);

		ifstream ifs(argv[ 1 ]);
		ReadIFS(ifs);
	}
	return  0 ;
}


ReadIFS
167
167

2174
2174

23732
23732

24445
24445

99520
99520

102079
102079

ReadIFS
167
2174
23732
24445
99520
102079
...
Рейтинг: 0 / 0
04.08.2005, 11:03
    #33201029
optimizm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
Надо имеено на С, вот полный код, его надо будет в другую старую прогу встроить, поэтому и С.
автор#include <share.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <cscape.h>
#include <popdecl.h>
#include <pmenu.h>
#include <scancode.h>
#include <vista.h>
#include "tigr.h"
#include <xdate.h>



main()
{
unsigned long nls;
FILE *fout1;
FILE *fin;
char buf[10];
//char *buf;


if ((fout1=fopen("doSpPorv.txt","wt")) != NULL);
else{
printf("\nОшибка пpи откpытии файла doSpProv.txt\n");
return(0);
}

if ((fin=fopen("a.txt","rt")) != NULL);
else{
printf("\na.txt\n");
return(0);
}



while (fgets(buf,10,fin)!=NULL)
{
nls=atol(buf);
fprintf(fout1,"%9lu\n",nls);
fprintf(fout1,"%s\n",buf);
} // while

fclose(fout1);
fclose(fin);

}
...
Рейтинг: 0 / 0
04.08.2005, 11:05
    #33201032
optimizm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
Могу a.txt скинуть кто у себя хочет проверить его работоспособность.
...
Рейтинг: 0 / 0
04.08.2005, 11:46
    #33201200
Monoceros
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
посмотри что возвращает функция atol, может не unsigned long? и точки запятой в строчках с if убери :)) да и заголовочных файлов что-то много у тебя
...
Рейтинг: 0 / 0
04.08.2005, 11:50
    #33201220
Monoceros
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
упс, про точки с запятой я погоричился, виноват...
...
Рейтинг: 0 / 0
04.08.2005, 12:07
    #33201312
optimizm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
А как мне посмотреть что она возвращает?
Заголовочные файлы позже будут нужны для обработки этих данных.
...
Рейтинг: 0 / 0
04.08.2005, 18:05
    #33202490
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
В тексте программу у тебя все правильно. У тебя не правильно в скрипте сборки. Ты подключаешь 16-и битную арифметическую библиотеку вместо 32-х битной. При этом исходный текст своей программы компилируешь в 32-х битном режиме. Иди в свой makefile или в свойства проекта если ты IDE пользуешься и укажи использовать large модель памяти.
...
Рейтинг: 0 / 0
05.08.2005, 13:48
    #33204184
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
optimizmА как мне посмотреть что она возвращает?
Заголовочные файлы позже будут нужны для обработки этих данных.

я ответил на другом форуме. Но и тут уже прозвучало - проблема не в коде, хотя кривоватость есть...

см. тут..

http://]www.relib.com/forums/topic.asp?id=877434

с уважением
(круглый)
...
Рейтинг: 0 / 0
11.08.2005, 01:43
    #33209396
_User
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
1a. buf должен иметь размер не менее 12 байт
1b. fgets(buf,11,stdin);
2. unsigned long nls;

P.S. А почему 1a & 1b, думаю, что Вы должны подумать сами, если не догадаетесь объясню...
_USER
...
Рейтинг: 0 / 0
17.08.2005, 11:41
    #33220029
naruto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание чисел из файла в Си
Есть предложение использовать fscanf.
чето типа такого буит

int number;
fscanf(file,"%i\n", &number);

никаких преобразований не нужно.
а вообще числа лучше хранить в бинарном файле, если конечно пользователю не важно как хранить числа в файле.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Считывание чисел из файла в Си / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]