Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с вводом/выводом. / 25 сообщений из 44, страница 1 из 2
23.06.2013, 13:04
    #38307338
AN90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
Здравствуйте! При использовании scanf_s почему-то в строку ничего не вводится. При использовании fopen_s укзатель на файл остаётся неинициализированным. scanf_s пока заменил на cin. Подскажите, пожалуйста, в чём дело? Код ниже.

FILE *f_source, *f_destination;
char *source_path, *destination_path,*mode;
................................................................
scanf_s("%s",source_path);
................................................................
scanf_s("%s",destination_path);
................................................................
mode="r";
fopen_s(&f_source,source_path,mode);
mode="w";
fopen_s(&f_destination,destination_path,mode);
char c;
fscanf_s(f_source,"%c",&c,1);
fprintf_s(f_destination,"%c",&c);
................................................................

На fprintf_s(f_destination,"%c",&c); выскакивает ошибка, добавленная во вложении.
...
Рейтинг: 0 / 0
23.06.2013, 13:36
    #38307350
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90,

Переменные source_path и destination_path равны NULL . Их нужно проинициализировать, например, так:
Код: plaintext
1.
char source_path[512], destination_path[512], *mode;

А также корректно использовать функции scanf_s :
Код: plaintext
1.
2.
scanf_s("%s",source_path, 512);
scanf_s("%s",destination_path, 512);
...
Рейтинг: 0 / 0
24.06.2013, 22:12
    #38308790
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90,

Почему не хотите использовать ifstream? Код получится более компактным и читабельным, а следовательно - менее подверженным ошибкам.
...
Рейтинг: 0 / 0
24.06.2013, 22:18
    #38308793
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
CompositumAN90,

Почему не хотите использовать ifstream? Код получится более компактным и читабельным, а следовательно - менее подверженным ошибкам.Потому что не все то С++ что слегка похоже на него.
...
Рейтинг: 0 / 0
24.06.2013, 22:25
    #38308798
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
White OwlПотому что не все то С++ что слегка похоже на него.
Ну почему же слегка...
AN90пока заменил на cin
Разве в C есть cin?
...
Рейтинг: 0 / 0
24.06.2013, 22:31
    #38308804
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
CompositumWhite OwlПотому что не все то С++ что слегка похоже на него.
Ну почему же слегка...Потому что кроме странной оговорки о cin весь код приведенный AN90 является примером использования С.
...
Рейтинг: 0 / 0
24.06.2013, 22:39
    #38308810
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
White OwlПотому что кроме странной оговорки о cin весь код приведенный AN90 является примером использования С.
по моему спор ни о чём. Раз автор заменил на cin (согласно его заявлению), значит он однозначно использует C++, а не C. Весь приведённый выше код можно совершенно спокойно использовать как в C, так и в C++. Я предпочитаю так не писать в C++, но на вкус и цвет все фломастеры разные, видимо автор по каким-то соображениям решил написать код в функциональном стиле. Не суть, ifstream на мой взгляд был бы более предпочтителен в данном случае.
...
Рейтинг: 0 / 0
24.06.2013, 22:41
    #38308813
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
Compositumвидимо автор по каким-то соображениям решил написать код в функциональном стиле. Не суть, ifstream на мой взгляд был бы более предпочтителен в данном случае.А при чем здесь "функциональный стиль"?
...
Рейтинг: 0 / 0
24.06.2013, 22:45
    #38308816
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
White OwlА при чем здесь "функциональный стиль"?[/quote]
Честно говоря, твой вопрос меня удивляет...
...
Рейтинг: 0 / 0
25.06.2013, 00:03
    #38308857
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
CompositumWhite OwlА при чем здесь "функциональный стиль"?
Честно говоря, твой вопрос меня удивляет...Да, да, я уже понял, слово красивое, но что оно означает ты не знаешь.
Во первых, C это процедурный язык, а не функциональный.
Во вторых, "функциональный стиль" это термин из лингвистики а не из IT.
...
Рейтинг: 0 / 0
30.06.2013, 18:07
    #38315118
AN90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
Да, сглупил, я конечно. Инициализировал переменные:
f_source=new FILE;
f_destination=new FILE;
Всё равно при отладке в указателях какая-то ерунда, и программа вылетает на том же самом месте.
...
Рейтинг: 0 / 0
30.06.2013, 18:48
    #38315133
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90f_source=new FILE;

Такого я еще не видел. А я видел многое

Почитайте что-ли какой-нибудь учебник по С вместо гадания. Поверьте - вы не угадаете ответ.
...
Рейтинг: 0 / 0
01.07.2013, 00:01
    #38315271
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
UsmanAN90,

Переменные source_path и destination_path равны NULL . Их нужно проинициализировать, например, так:
Код: plaintext
1.
char source_path[512], destination_path[512], *mode;

А также корректно использовать функции scanf_s :
Код: plaintext
1.
2.
scanf_s("%s",source_path, 512);
scanf_s("%s",destination_path, 512);



А зачем ты тип переменных-то поменял?
...
Рейтинг: 0 / 0
01.07.2013, 00:03
    #38315274
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
CompositumWhite OwlА при чем здесь "функциональный стиль"?
Честно говоря, твой вопрос меня удивляет...[/quot]

Меня нет. При чем?
...
Рейтинг: 0 / 0
01.07.2013, 20:35
    #38316340
AN90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
Честно говоря, затрудняюсь определить самостоятельно промах. После открытия файлов имеем следующее:

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
01.07.2013, 21:16
    #38316377
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90,

Финальный код выложи, чтобы обсуждать было что. Код ЦЕЛИКОМ.
...
Рейтинг: 0 / 0
01.07.2013, 21:19
    #38316383
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90Честно говоря, затрудняюсь определить самостоятельно промах. После открытия файлов имеем следующее:У меня достаточно большой экран, но такие картинки в него не лезут. Научись пожалуйста пользоваться gimp'ом или photoshop'ом. Обрезать пустые края картинки это вообще элементарная операция.
...
Рейтинг: 0 / 0
01.07.2013, 21:24
    #38316390
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90,

Код у тебя трижды неправильный:

MSDN:
Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or [. The buffer size is passed as an additional parameter immediately following the pointer to the buffer or variable. For example, if reading a string, the buffer size for that string is passed as follows:

char s[10];

scanf("%9s", s, 10);

The buffer size includes the terminating null. A width specification field may be used to ensure that the token read in will fit into the buffer. If no width specification field is used, and the token read is too big to fit in the buffer, nothing will be written to that buffer.


Кроме этого буфера эти ещё и выделять надо, и они естественно не FILE*.

Рекомендация: сначала напиши все на scanf, потом поделаешь уже на scanf_s.
...
Рейтинг: 0 / 0
01.07.2013, 21:25
    #38316391
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
MasterZivAN90,

Код у тебя трижды неправильный:

MSDN:
Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or [. The buffer size is passed as an additional parameter immediately following the pointer to the buffer or variable. For example, if reading a string, the buffer size for that string is passed as follows:

char s[10];

scanf("%9s", s, 10);

The buffer size includes the terminating null. A width specification field may be used to ensure that the token read in will fit into the buffer. If no width specification field is used, and the token read is too big to fit in the buffer, nothing will be written to that buffer.


Кроме этого буфера эти ещё и выделять надо, и они естественно не FILE*.

Рекомендация: сначала напиши все на scanf, потом переделаешь уже на scanf_s.
...
Рейтинг: 0 / 0
01.07.2013, 21:40
    #38316408
AN90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
MasterZiv, так а почему же компилятор ничего не выдаёт? Я же поставил там единицу в размер?
...
Рейтинг: 0 / 0
01.07.2013, 21:43
    #38316410
AN90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
MasterZiv, и, кстати, VS 2012 почему-то потребовала и именно fscanf_s, fprint_s. Вот код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
FILE *f_source, *f_destination;
	char *source_path, *destination_path,*mode;
	
	source_path=(char *) calloc(size_file_pass,sizeof(char));
	destination_path=(char *) calloc(size_file_pass,sizeof(char));
	printf("Enter full path to source file: ");
	
	cin >> source_path;	
	printf("Enter full path to destination file: ");
	
	cin >> destination_path;
	mode="r";
	fopen_s(&f_source,source_path,mode);
	mode="w";
	fopen_s(&f_destination,destination_path,mode);
	char c;
	fscanf_s(f_source,"%c",&c);
	fprintf_s(f_destination,"%c",&c);
...
Рейтинг: 0 / 0
01.07.2013, 23:28
    #38316493
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
White OwlAN90Честно говоря, затрудняюсь определить самостоятельно промах. После открытия файлов имеем следующее:У меня достаточно большой экран, но такие картинки в него не лезут. Научись пожалуйста пользоваться gimp'ом или photoshop'ом. Обрезать пустые края картинки это вообще элементарная операция.

Какой гимп, какой фото шоп? Простой paint с этим справляется великолепно!
...
Рейтинг: 0 / 0
01.07.2013, 23:32
    #38316495
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90MasterZiv, так а почему же компилятор ничего не выдаёт? Я же поставил там единицу в размер?

Потому что и не должен ничего выдавать.
А не должен потому что не может. И если бы ты, двоечник, учил бы про функции с элипсисом, и как туда передаются параметры, ты бы об этом знал.
...
Рейтинг: 0 / 0
01.07.2013, 23:35
    #38316498
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90 Я же поставил там единицу в размер?

Где ты поставил размер?
...
Рейтинг: 0 / 0
01.07.2013, 23:49
    #38316508
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с вводом/выводом.
AN90,

, и, кстати, VS 2012 почему-то потребовала и именно fscanf_s, fprint_s.

Потому что без префикса "f" функции работают неявно с stdin и stdout, а у тебя явно указывается файл.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с вводом/выводом. / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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