русский
Germany.ruForen → Архив Досок→ Programmierung

Чтение файла с помощью C

187  
tavy гость06.11.07 13:48
tavy
NEW 06.11.07 13:48 
Такая проблема. Имеется файл в котором в столбик записаны числа (5-6 цифр подряд). Этот файл читается, каждый символ один за другим ( функцией getc() ), после чего каждое полученное число записывается в массив. Но дело в том, что вместо исходных чисел получаются совершенно левые! И почему, непонятно. Может есть какая-нибудь функция считывния строки из файла? И ккакая тут вообще может быть ошибка?
#1 
  digital.pilot коренной житель06.11.07 14:20
digital.pilot
NEW 06.11.07 14:20 
in Antwort tavy 06.11.07 13:48, Zuletzt geändert 06.11.07 14:21 (digital.pilot)
В ответ на:
И ккакая тут вообще может быть ошибка?

сложение (умножение, деление друг на друга и возведение в степень по rand()) символьных кодов, получаемых через getc(), вместо конкатенации символов и последующего преобразования в число? :D А вообще, без кода и примера входных данных вопрос, конечно, к телепатам.
#2 
tavy гость06.11.07 14:43
tavy
NEW 06.11.07 14:43 
in Antwort digital.pilot 06.11.07 14:20
int ch, i;
FILE *in;
i = 0;
if((in = fopen (argv[1], "r")) != NULL)
{
while ((ch = getc(in)) != EOF)
{
x = ch;
i++;
}
fclose(in);
}
как я понимаю, эти символы уже как int из файла получаются, или их еще раз в число переводить надо? Я уже слегка запуталась.
#3 
Simple Nothing is f*cked06.11.07 15:08
Simple
NEW 06.11.07 15:08 
in Antwort tavy 06.11.07 14:43
Вместо цифр ты записываешь в массив их ascii-коды.
Пользуйся тэгом pre, когда показываешь код.
#4 
Murr коренной житель06.11.07 17:17
Murr
NEW 06.11.07 17:17 
in Antwort tavy 06.11.07 14:43
Получи, для начала, компилируемую программу.
x = ch; - пременная х здесь не определена.
#5 
  scorpi_ сам ты прохожий!06.11.07 17:26
NEW 06.11.07 17:26 
in Antwort tavy 06.11.07 13:48
В ответ на:
Может есть какая-нибудь функция считывния строки из файла?

fscanf - http://msdn2.microsoft.com/en-us/library/cb5kac8b(VS.80).aspx
#6 
Murr коренной житель06.11.07 17:51
Murr
NEW 06.11.07 17:51 
in Antwort scorpi_ 06.11.07 17:26
Есть большой шанс, что у человека задание на эмуляцию сканирования целого по формату "%d\n".
Точнее - на понимание разницы между текстовым представлением в файле и бинарным форматом int'a.
В этом случае умоминание fscanf - вредено.
#7 
tavy гость06.11.07 18:11
tavy
NEW 06.11.07 18:11 
in Antwort Murr 06.11.07 17:17
всё компилируется и работает, ток не то из файла выдает. Я просто только кусок программы выдрала, там где собственно и проблема.
#8 
tavy гость06.11.07 18:13
tavy
NEW 06.11.07 18:13 
in Antwort scorpi_ 06.11.07 17:26
там для Visual C++, а у меня C Borland. Разница есть?
#9 
  scorpi_ сам ты прохожий!06.11.07 22:03
NEW 06.11.07 22:03 
in Antwort tavy 06.11.07 18:13
Это же стандарт ANSI C, никакой разницы быть не должно.
PS Хотя какая-то функция у борланда работала неправильно, strncpy кажется...
#10 
Murr коренной житель06.11.07 22:28
Murr
NEW 06.11.07 22:28 
in Antwort tavy 06.11.07 18:11
всё компилируется и работает, ток не то из файла выдает.
------
Угу... Наилучшим образом в терминах женской логики это было описано так
"Опять ОН (подразумевается - компьютер) неправильно считает"
и
"Наконец-то ОНА (подразумевается - моя программа) заработала"
Термин РАБОТАЕТ у программиста означает, что при любых корректных исходных
данных программа выдает корректный результат.
Я просто только кусок программы выдрала, там где собственно и проблема.
-----
Приведенный кусок кода читает в цикле символы из файла и присваивает их неопределенной переменной х.
Кроме этого он подсчитывает количество символов. Сделать на основании этого и приведенного описания задания заключение об том что именно неправильно у меня не получается - блок телепатии сдан в ремонт.
#11 
tavy гость07.11.07 16:23
tavy
NEW 07.11.07 16:23 
in Antwort Murr 06.11.07 22:28
наверно прикольно так жить, ко всем и всему придираясь...
#12 
AlexNek старожил07.11.07 21:39
AlexNek
NEW 07.11.07 21:39 
in Antwort tavy 06.11.07 14:43
Давайте рассмотрим простой пример без всякой программы,
есть число-строка "123" - сто двадцать три как число. Если его читать по символам то получим "1", "2", "3" - один, два, три /*примечание для "мурки" одиночные кавычки на русском искать лень */ Для того что бы получилось первое число надо сделать следующее: 1*100+2*10+3*1. Думаю где то в этом районе и порылась проблема, как говорит мне мой блок предсказаний
#13 
AlexNek старожил07.11.07 21:45
AlexNek
07.11.07 21:45 
in Antwort AlexNek 07.11.07 21:39, Zuletzt geändert 07.11.07 21:49 (AlexNek)
если символы одной строки записывать вначале в массив, то получим строку которую можно стандартной функцией перевести в число.
Вход видимо такой
12345
123456
23457
323458
595858
607693
38474
#14 
Murr коренной житель07.11.07 21:54
Murr
NEW 07.11.07 21:54 
in Antwort AlexNek 07.11.07 21:45, Zuletzt geändert 07.11.07 22:06 (Murr)
/*примечание для "мурки" одиночные кавычки на русском искать лень*/
------
У Кошки они там же, где и двойные, на другом регистре... ну или ALT + '3' + '9' (на цифровой)
надо сделать следующее: 1*100+2*10+3*1.
------
(((1)*10^1 + 2)*10^1) + 3*10^0)
Вход видимо такой
1234
12345
2345
------
Почти. ВК & ПС (0x0A, 0x0D) потеряны. Будет существенно при обработке последнего значения...
#15 
AlexNek старожил07.11.07 22:25
AlexNek
NEW 07.11.07 22:25 
in Antwort Murr 07.11.07 21:54
У Кошки они там же, где и двойные, на другом регистре... ну или ALT + '3' + '9' (на цифровой)
Так на англицком у меня так же. А вот где они на немецком лаптопе, с русской раскладкой клавы /и без "цифровой" части/ хрень знает.
Почти. ВК & ПС (0x0A, 0x0D) потеряны.
Не а не потеряны, они только в розовых очках видны
#16 
AlexNek старожил07.11.07 22:31
AlexNek
NEW 07.11.07 22:31 
in Antwort Murr 07.11.07 21:54

(((1)*10^1 + 2)*10^1) + 3*10^0)
Ну тоды уже так:
(((1)*10^1 + 2*10^0)*10^1) + 3*10^0)
Вот что значит 4 лапы и один хвост, сколько скобок умудрились набрать
#17