Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HERETIC
90 / 90 / 3
Регистрация: 10.10.2008
Сообщений: 607
Завершенные тесты: 1
#1

Некорректная работа функции fscanf - C++

13.05.2014, 22:41. Просмотров 280. Ответов 9
Метки нет (Все метки)

Пишу прогу. Нужно считать из файла данные. Читаю при помощи fscanf. В итоге прога вроде работает, а вот в переменной куда считываю оказывается белиберда. Подскажите мою ошибку?
Текст проги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<conio.h>
 
using namespace std;
 
int main()
{
   setlocale(LC_ALL, "Rus");
   FILE* SOUR;
   if((SOUR = fopen("SOURCE_DOS.TXT", "rt")) == NULL)
      printf("Не удается открыть файл.");
   char T[900];
 
   fscanf (SOUR, "%474c", &T);
   fprintf(stdout, "%c", T); // для проверки
}
Это только выборка из проги - тот кусок который не работает. Файл SOURCE_DOS.TXT во вложении. Помогите срочно нужна помощь.
Вложения
Тип файла: txt SOURCE_DOS.TXT (1.0 Кб, 5 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2014, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорректная работа функции fscanf (C++):

Некорректная работа функции pow - C++
Доброго времени суток. задали в универе написать прогу которая решала б кубическое уравнение.В расчетных формулах использовал функцию pow...

Шаблон функции. Некорректная работа - C++
Здравствуйте. Проблема такая: ниже приведенный код почему то некорректно отображает вызовы со всеми последующими массивами после float в...

Некорректная работа повторно вызываемой функции - C++
wstring fdirection(void) { wcout &lt;&lt; L&quot;Введите путь к файлу, который хотите зашифровать (файл должен существовать): &quot; &lt;&lt; std::endl; ...

Идентификатор функции fscanf - C++
Здравсвуйте какой идентификатор поставить чтобы считывалось дробное число из файла? При идентификаторе d вообще считвает почему-то запятая ...

Аналог функции fscanf (C++) - C++
Здравствуйте. По заданию нужно написать аналог функции fscanf на языке C++. Каким способом это можно реализовать: построчное чтение с...

Некорректная работа _getch() - C++
При очень быстром нажатии двух клавиш подряд _getch() ловит два символа. И за-за этого программа работает нестабильно. Это фиксится?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zer0mail
2332 / 1958 / 192
Регистрация: 03.07.2012
Сообщений: 7,021
Записей в блоге: 1
13.05.2014, 23:18 #2
Попробуй так:
C++
1
2
  fscanf (SOUR, "%s", T);
  fprintf(stdout, "%s", T); // для проверки
HERETIC
90 / 90 / 3
Регистрация: 10.10.2008
Сообщений: 607
Завершенные тесты: 1
13.05.2014, 23:49  [ТС] #3
Так вроде бы работает, но считывает только 78 символов. Не доганяю, fscanf считывает только до конца строки что ли????. А мне то нужно грубо говоря считать всю "шапку" из файла, а это 474 символа.
zer0mail
2332 / 1958 / 192
Регистрация: 03.07.2012
Сообщений: 7,021
Записей в блоге: 1
13.05.2014, 23:58 #4
можно так:
C++
1
2
3
fscanf (SOUR, "%474c", T);
   T[474]=0;
   fprintf(stdout, "%s", T); // для проверки
но это извращение
HERETIC
90 / 90 / 3
Регистрация: 10.10.2008
Сообщений: 607
Завершенные тесты: 1
14.05.2014, 00:06  [ТС] #5
Цитата Сообщение от zer0mail Посмотреть сообщение
можно так:

C++
1
2
3
fscanf (SOUR, "%474c", T);
 T[474]=0;
 fprintf(stdout, "%s", T); // для проверки
Так код работает. Но вот почему мой код не работает. В чем ошибка-то. Что-то видимо я не понимаю.
zer0mail
2332 / 1958 / 192
Регистрация: 03.07.2012
Сообщений: 7,021
Записей в блоге: 1
14.05.2014, 00:14 #6
В буфер данные читаются правильно, а при выводе по "%c" выводится младший байт адреса буфера Т (он передается в параметр функции).
HERETIC
90 / 90 / 3
Регистрация: 10.10.2008
Сообщений: 607
Завершенные тесты: 1
14.05.2014, 00:19  [ТС] #7
А если я напишу так:
C++
1
fprintf(stdout, "%474c", T);
то тоже получиться на выходе фигня.
zer0mail
2332 / 1958 / 192
Регистрация: 03.07.2012
Сообщений: 7,021
Записей в блоге: 1
14.05.2014, 00:33 #8
Все равно выведется младший байт адреса буфера, только перед ним будет 473 пробела.
HERETIC
90 / 90 / 3
Регистрация: 10.10.2008
Сообщений: 607
Завершенные тесты: 1
14.05.2014, 00:37  [ТС] #9
Ясно спасибо за помощь. Я кстати отправил сообщение в личку. Может поможешь?
zer0mail
2332 / 1958 / 192
Регистрация: 03.07.2012
Сообщений: 7,021
Записей в блоге: 1
14.05.2014, 00:41 #10
Я против личных обращений с просьбами о помощи.
Это форум - каждый сам решает, кому и как помогать. Кроме того, ответы могут быть полезны другим.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 00:41
Привет! Вот еще темы с ответами:

Некорректная работа цикла for. - C++
Ниже приведен код программы, вычисляющей по заданному n значение n!. Прошу объяснить, почему программа выдает отрицательные числа порядка...

Некорректная работа компилятора - C++
простая схема для метода пузырькового упорядочения /* * Проект 4-1. Метод пузырькового * упорядочения. */ #include...

Некорректная работа программы - C++
Суть программы в том, что есть записанные в файле слова с ответами (разделены &quot;\t\t&quot;). Программа считывает поочереди строки, разделяет ее...

Некорректная работа программы - C++
Помогите, пожалуйста, понять почему не работает программа. Ввод предложения работает, однако после нажатия клавиши Enter инвертированный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.05.2014, 00:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru