powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с вводом/выводом.
44 сообщений из 44, показаны все 2 страниц
Проблема с вводом/выводом.
    #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
Проблема с вводом/выводом.
    #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
Проблема с вводом/выводом.
    #38308790
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90,

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

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

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

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

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

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

Финальный код выложи, чтобы обсуждать было что. Код ЦЕЛИКОМ.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38316383
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90Честно говоря, затрудняюсь определить самостоятельно промах. После открытия файлов имеем следующее:У меня достаточно большой экран, но такие картинки в него не лезут. Научись пожалуйста пользоваться gimp'ом или photoshop'ом. Обрезать пустые края картинки это вообще элементарная операция.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #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
Проблема с вводом/выводом.
    #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
Проблема с вводом/выводом.
    #38316408
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, так а почему же компилятор ничего не выдаёт? Я же поставил там единицу в размер?
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #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
Проблема с вводом/выводом.
    #38316493
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlAN90Честно говоря, затрудняюсь определить самостоятельно промах. После открытия файлов имеем следующее:У меня достаточно большой экран, но такие картинки в него не лезут. Научись пожалуйста пользоваться gimp'ом или photoshop'ом. Обрезать пустые края картинки это вообще элементарная операция.

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

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

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

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

Потому что без префикса "f" функции работают неявно с stdin и stdout, а у тебя явно указывается файл.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323248
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь может подсказать, почему получаются такие значения в указателях на файлы после их открытия через fopen_s? Судя по msdn, вызываю правильно.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323270
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какими они должны получаться?
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323271
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90Кто-нибудь может подсказать, почему получаются такие значения в указателях на файлы после их открытия через fopen_s? Судя по msdn, вызываю правильно.
Так вы не по МСДН судите, а смотрите код ошибки после открытия файла.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323274
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, ну не нулями, я полагаю. И не то, что в другом написано.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323276
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, типа такого сделать
if( (err = fopen_s( &stream, "crt_fopen_s.c", "r" )) !=0 ) ?
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323279
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90,

Ну и смотрите значение err при открытии f_source, который судя по тому что он null - не открылся.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38323555
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90White Owl, ну не нулями, я полагаю. И не то, что в другом написано.А почему ты считаешь что в "другом" значения правильные а нули это неправильные значения?
Содержимое структуры FILE является личной собственностью используемой библиотеки. Там может быть абсолютно все что угодно, используемое так как угодно библиотеке. Сам ты туда лезть не должен вообще.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38330277
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, я переписал открытие файлов:
mode="r";
if ((err=fopen_s(&f_source,source_path,mode))!=0)
cout <<"Error is " << err;
mode="w";
if ((fopen_s(&f_destination,destination_path,mode))!=0)
cout <<"Error is " << err;

Ошибка появляется только при открытии f_source. Значение err: 2. Как пишет вот здесь http://social.msdn.microsoft.com/Forums/vstudio/en-US/60f29244-3963-44a7-8ccc-a78faeaca1f4/error-in-fopen товарищ такая ошибка означает ,что файл не найден. Файлы лежат вместе с файлом *.sln. Ввожу просто имя и расширение текстовых файлов.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38330320
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90Anatoly Moskovsky, я переписал открытие файлов:
mode="r";
if ((err=fopen_s(&f_source,source_path,mode))!=0)
cout <<"Error is " << err;
mode="w";
if ((fopen_s(&f_destination,destination_path,mode))!=0)
cout <<"Error is " << err;

Ошибка появляется только при открытии f_source. Значение err: 2. Как пишет вот здесь http://social.msdn.microsoft.com/Forums/vstudio/en-US/60f29244-3963-44a7-8ccc-a78faeaca1f4/error-in-fopen товарищ такая ошибка означает ,что файл не найден. Файлы лежат вместе с файлом *.sln. Ввожу просто имя и расширение текстовых файлов.Не верно, тот товарищ врет. Надо читать вот здесь:
http://msdn.microsoft.com/en-us/library/vstudio/z5hh6ee9.aspx
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38330406
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90,

Если указывать имя файла без пути, то файл ищется в текущем каталоге программы.
Я очень сомневаюсь, что этот текущий каталог совпадает с тем, где находится .sln
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38330516
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указываю теперь полные пути: C:\1.txt... Только на одной проверке открытия есть ненулевое значение err, равное 13 (Permission denied). То бишь, доступ запрещён.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38330523
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё что нашёл:
13 EACCES
Search permission is denied on a component of the path prefix, or the file exists and the permissions specified by mode are denied, or the file does not exist and write permission is denied for the parent directory of the file to be created.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38338140
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь знает, почему так, и что с этим делать?
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38338164
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90,

Пока не видим конкретный код, а не обрывки каких-то набросков, ничего сказать нельзя.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38338167
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую убрать все лишнее и привести здесь минимальный компилируемый код, на котором наблюдается проблема.
Думаю уже на этом этапе вы сами разберетесь. Но если нет, то кто-то подскажет.
Без кода который можно откомпилировать и запустить никто вам не будет гадать.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38338182
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, вот полный код: <code>
// Copying files.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>
using namespace std;


#define size_file_pass 500

int _tmain(int argc, _TCHAR* argv[])
{
FILE *f_source, *f_destination;
char *source_path, *destination_path,*mode;
errno_t err;
//f_source=new FILE;
//f_destination=new FILE;
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: ");
//scanf_s("%s",source_path);
cin >> source_path;
printf("Enter full path to destination file: ");
//scanf_s("%s",destination_path);
cin >> destination_path;
mode="r";
if ((err=fopen_s(&f_source,source_path,mode))!=0)
cout <<"Error is " << err;
mode="w";
if ((err=fopen_s(&f_destination,destination_path,mode))!=0)
cout <<"Error is " << err;
char c;
fscanf_s(f_source,"%c",&c,1);
fprintf_s(f_destination,"%c",c);
printf("\n");
printf("%s\n",source_path);
printf("%s\n",destination_path);
fclose(f_source);
fclose(f_destination);
free(source_path);
free(destination_path);
getchar();
getchar();
return 0;
}

</code>

Да, во многом разобрался теперь. Переместил файлы, с которыми ведётся работа с системного диска на другой. Добавил размер буфера 1 в fscanf_s и убрал амперсанд в fprintf_s перед c. Теперь работает ,ошибок нет. Хотелось бы узнать, почему при нахождении файлов на системном диске была ошибка доступа. Предполагаю, что ОС не даёт менять все файлы системного диска, уже встречался с подобными проблемами. Установлена Win8 Pro.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38338191
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90,

В современных виндах без эскалации прав до админа в корневом каталоге сис. раздела создавать/менять файлы нельзя.
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38376933
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, а как это реализовать программно?
...
Рейтинг: 0 / 0
Проблема с вводом/выводом.
    #38376938
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё вопрос: пытаюсь скопировать содержимое одного файла в другой. Всё копируется, но последний блок данных (в моём случае -это символ, дублируется). Код:
char c;
int i=0;

while (!feof(f_source))/*EOF*/
{
fscanf_s(f_source,"%c",&c,1);
fprintf_s(f_destination,"%c",c);
i++;
}
Почему так?
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с вводом/выводом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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