Login
Чтение файла с помощью C
187
NEW 06.11.07 13:48
Такая проблема. Имеется файл в котором в столбик записаны числа (5-6 цифр подряд). Этот файл читается, каждый символ один за другим ( функцией getc() ), после чего каждое полученное число записывается в массив. Но дело в том, что вместо исходных чисел получаются совершенно левые! И почему, непонятно. Может есть какая-нибудь функция считывния строки из файла? И ккакая тут вообще может быть ошибка?
NEW 06.11.07 14:20
сложение (умножение, деление друг на друга и возведение в степень по rand()) символьных кодов, получаемых через getc(), вместо конкатенации символов и последующего преобразования в число? :D А вообще, без кода и примера входных данных вопрос, конечно, к телепатам.
in Antwort tavy 06.11.07 13:48, Zuletzt geändert 06.11.07 14:21 (digital.pilot)
В ответ на:
И ккакая тут вообще может быть ошибка?
И ккакая тут вообще может быть ошибка?
сложение (умножение, деление друг на друга и возведение в степень по rand()) символьных кодов, получаемых через getc(), вместо конкатенации символов и последующего преобразования в число? :D А вообще, без кода и примера входных данных вопрос, конечно, к телепатам.
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 из файла получаются, или их еще раз в число переводить надо? Я уже слегка запуталась.
FILE *in;
i = 0;
if((in = fopen (argv[1], "r")) != NULL)
{
while ((ch = getc(in)) != EOF)
{
x = ch;
i++;
}
fclose(in);
}
как я понимаю, эти символы уже как int из файла получаются, или их еще раз в число переводить надо? Я уже слегка запуталась.
NEW 06.11.07 15:08
in Antwort tavy 06.11.07 14:43
NEW 06.11.07 17:17
in Antwort tavy 06.11.07 14:43
NEW 06.11.07 17:26
fscanf - http://msdn2.microsoft.com/en-us/library/cb5kac8b(VS.80).aspx
in Antwort tavy 06.11.07 13:48
В ответ на:
Может есть какая-нибудь функция считывния строки из файла?
Может есть какая-нибудь функция считывния строки из файла?
fscanf - http://msdn2.microsoft.com/en-us/library/cb5kac8b(VS.80).aspx
NEW 06.11.07 17:51
in Antwort scorpi_ 06.11.07 17:26
Есть большой шанс, что у человека задание на эмуляцию сканирования целого по формату "%d\n".
Точнее - на понимание разницы между текстовым представлением в файле и бинарным форматом int'a.
В этом случае умоминание fscanf - вредено.
Точнее - на понимание разницы между текстовым представлением в файле и бинарным форматом int'a.
В этом случае умоминание fscanf - вредено.
NEW 06.11.07 18:11
in Antwort Murr 06.11.07 17:17
всё компилируется и работает, ток не то из файла выдает. Я просто только кусок программы выдрала, там где собственно и проблема.
NEW 06.11.07 18:13
in Antwort scorpi_ 06.11.07 17:26
там для Visual C++, а у меня C Borland. Разница есть?
NEW 06.11.07 22:03
in Antwort tavy 06.11.07 18:13
Это же стандарт ANSI C, никакой разницы быть не должно.
PS Хотя какая-то функция у борланда работала неправильно, strncpy кажется...
PS Хотя какая-то функция у борланда работала неправильно, strncpy кажется...
NEW 06.11.07 22:28
in Antwort tavy 06.11.07 18:11
всё компилируется и работает, ток не то из файла выдает.
------
Угу... Наилучшим образом в терминах женской логики это было описано так
"Опять ОН (подразумевается - компьютер) неправильно считает"
и
"Наконец-то ОНА (подразумевается - моя программа) заработала"
Термин РАБОТАЕТ у программиста означает, что при любых корректных исходных
данных программа выдает корректный результат.
Я просто только кусок программы выдрала, там где собственно и проблема.
-----
Приведенный кусок кода читает в цикле символы из файла и присваивает их неопределенной переменной х.
Кроме этого он подсчитывает количество символов. Сделать на основании этого и приведенного описания задания заключение об том что именно неправильно у меня не получается - блок телепатии сдан в ремонт.
------
Угу... Наилучшим образом в терминах женской логики это было описано так
"Опять ОН (подразумевается - компьютер) неправильно считает"
и
"Наконец-то ОНА (подразумевается - моя программа) заработала"
Термин РАБОТАЕТ у программиста означает, что при любых корректных исходных
данных программа выдает корректный результат.
Я просто только кусок программы выдрала, там где собственно и проблема.
-----
Приведенный кусок кода читает в цикле символы из файла и присваивает их неопределенной переменной х.
Кроме этого он подсчитывает количество символов. Сделать на основании этого и приведенного описания задания заключение об том что именно неправильно у меня не получается - блок телепатии сдан в ремонт.
NEW 07.11.07 16:23
in Antwort Murr 06.11.07 22:28
наверно прикольно так жить, ко всем и всему придираясь...
07.11.07 21:39
in Antwort tavy 06.11.07 14:43
Давайте рассмотрим простой пример без всякой программы,
есть число-строка "123" - сто двадцать три как число. Если его читать по символам то получим "1", "2", "3" - один, два, три /*примечание для "мурки" одиночные кавычки на русском искать лень
*/ Для того что бы получилось первое число надо сделать следующее: 1*100+2*10+3*1. Думаю где то в этом районе и порылась проблема, как говорит мне мой блок предсказаний 
есть число-строка "123" - сто двадцать три как число. Если его читать по символам то получим "1", "2", "3" - один, два, три /*примечание для "мурки" одиночные кавычки на русском искать лень


NEW 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
Вход видимо такой
12345
123456
23457
323458
595858
607693
38474
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) потеряны. Будет существенно при обработке последнего значения...
------
У Кошки они там же, где и двойные, на другом регистре... ну или ALT + '3' + '9' (на цифровой)
надо сделать следующее: 1*100+2*10+3*1.
------
(((1)*10^1 + 2)*10^1) + 3*10^0)
Вход видимо такой
1234
12345
2345
------
Почти. ВК & ПС (0x0A, 0x0D) потеряны. Будет существенно при обработке последнего значения...
NEW 07.11.07 22:25
in Antwort Murr 07.11.07 21:54
У Кошки они там же, где и двойные, на другом регистре... ну или ALT + '3' + '9' (на цифровой)
Так на англицком у меня так же. А вот где они на немецком лаптопе, с русской раскладкой клавы /и без "цифровой" части/ хрень знает.
Почти. ВК & ПС (0x0A, 0x0D) потеряны.
Не а не потеряны, они только в розовых очках видны
Так на англицком у меня так же. А вот где они на немецком лаптопе, с русской раскладкой клавы /и без "цифровой" части/ хрень знает.
Почти. ВК & ПС (0x0A, 0x0D) потеряны.
Не а не потеряны, они только в розовых очках видны

NEW 07.11.07 22:31
(((1)*10^1 + 2)*10^1) + 3*10^0)
Ну тоды уже так:
(((1)*10^1 + 2*10^0)*10^1) + 3*10^0)
Вот что значит 4 лапы и один хвост, сколько скобок умудрились набрать
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 лапы и один хвост, сколько скобок умудрились набрать
