powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Считывание чисел из файла в Си
14 сообщений из 14, страница 1 из 1
Считывание чисел из файла в Си
    #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
Считывание чисел из файла в Си
    #33200904
Monoceros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эх, тяжко без Си под рукой что-либо тут говорить... но я вот в толк взять никак не могу зачем тебя последний fprintf нужен?
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #33200925
SeraTJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В приведенном коде все в порядке. Следовательно, ошибочный код где-то выше. Надеюсь, что переменная buf определена образом:
Код: plaintext
char buf[ 10 ];

а НЕ char* buf;

ну, и еще возможно дело в том, как ты открываешь in/out файлы.
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #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
Считывание чисел из файла в Си
    #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
Считывание чисел из файла в Си
    #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
Считывание чисел из файла в Си
    #33201032
optimizm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу a.txt скинуть кто у себя хочет проверить его работоспособность.
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #33201200
Monoceros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посмотри что возвращает функция atol, может не unsigned long? и точки запятой в строчках с if убери :)) да и заголовочных файлов что-то много у тебя
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #33201220
Monoceros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
упс, про точки с запятой я погоричился, виноват...
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #33201312
optimizm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как мне посмотреть что она возвращает?
Заголовочные файлы позже будут нужны для обработки этих данных.
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #33202490
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тексте программу у тебя все правильно. У тебя не правильно в скрипте сборки. Ты подключаешь 16-и битную арифметическую библиотеку вместо 32-х битной. При этом исходный текст своей программы компилируешь в 32-х битном режиме. Иди в свой makefile или в свойства проекта если ты IDE пользуешься и укажи использовать large модель памяти.
...
Рейтинг: 0 / 0
Считывание чисел из файла в Си
    #33204184
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimizmА как мне посмотреть что она возвращает?
Заголовочные файлы позже будут нужны для обработки этих данных.

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

см. тут..

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

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

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

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

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


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