Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 27

Не считываются данные с консоли

14.12.2016, 02:58. Показов 807. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в том, что не считываются данные с консоли. Не могу понять почему....Выводит ошибку доступа к данным. Ясно, что дело в scanf, но почему не могу понять,чем заменить, чтобы данные считывались корректно.
И далее, из-за этого не заносятся данные в Пайп видимо или есть другая причина?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* PtrOnString;
    TCHAR string[50];
    PtrOnString = string;
    bool connect=false;
    printf("Enter the mathematical expression: ");
    int i;
    scanf_s("% 255[^\n]", PtrOnString);
    HANDLE Daddy;
    LPCSTR AdresNameFile = ("\\\\.\\pipe\\MyPipe");
    Daddy = CreateNamedPipe(AdresNameFile, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 1, 256, 256, NULL);
    if (Daddy == INVALID_HANDLE_VALUE)
    {
        printf("Daddy's PIPE doesn't createeeeeeeeee");
        printf("  NNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
        system("pause");
        return GetLastError();
    };
 
    DWORD written;
    //written = strlen(PtrOnString);
    //WriteFile(Daddy, PtrOnString, strlen(PtrOnString)+1,&written, NULL);
    WriteFile(Daddy, PtrOnString, 50, &written, NULL);
    if (Daddy == INVALID_HANDLE_VALUE)
    {
        printf("Error! Can not write in Pipe\n");
        return 1;
    };
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2016, 02:58
Ответы с готовыми решениями:

Неправильно считываются русские символы из консоли
упорно не хочет читать русские символы из консоли :( выводятся нормально, а считывает введенные не правильно ! setlocale(LC_ALL,...

Не считываются данные с БД
Есть БД "DataBase",в которой есть таблица "Actors" (Id(smallint ключ),Name(nchar),Login(nchar),Password(nchar),Speciality(nchar (Или...

Долго считываются данные из БД
Почему данные долго открывается

11
 Аватар для prokl9tiy
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
14.12.2016, 03:14
Цитата Сообщение от Asinrus Посмотреть сообщение
TCHAR* PtrOnString;
место выдели, куда данные складывать
C++
1
TCHAR* PtrOnString = new TCHAR[INFINITE];
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
14.12.2016, 09:56
Цитата Сообщение от prokl9tiy Посмотреть сообщение
место выдели, куда данные складывать
Вообще-то есть
Цитата Сообщение от Asinrus Посмотреть сообщение
PtrOnString = string;
А вот здесь
Цитата Сообщение от Asinrus Посмотреть сообщение
scanf_s("% 255[^\n]", PtrOnString);
формат приема %s Вы не потеряли. И 255 - это что, ограничение на прием строки, но Вы выделили всего 50 символов
0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 27
14.12.2016, 10:27  [ТС]
Так, изменил частично и все равно никак
C++
1
2
3
4
5
6
7
8
TCHAR* PtrOnString;
    TCHAR string[50];
    PtrOnString = string;
    bool connect=false;
    printf("Enter the mathematical expression: ");
    int i;
    scanf_s("%50s", PtrOnString);
    HANDLE Daddy;
Прикрепляю, что выводит. Может дело в TCHAR?
Миниатюры
Не считываются данные с консоли   Не считываются данные с консоли  
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
14.12.2016, 10:45
А Вы вводите большую строку, попробуйте несколько символов.
%50s тоже многовато, конец строки некуда ставить.
Цитата Сообщение от Asinrus Посмотреть сообщение
Может дело в TCHAR?
Попробуйте заменить TCHAR просто на char.
0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 27
14.12.2016, 10:48  [ТС]
Простите, что создал тему без формулировку задачи.
Задача такая: на ввод подается математическое выражение. Надо через пайп передать его клиенту и чтобы потом клиент вернул ответ от выражения
0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 27
14.12.2016, 11:07  [ТС]
Заменил на char. Данные стал считывать, но ввод некорректен. Вот, поэтому я и использовал TCHAR
Миниатюры
Не считываются данные с консоли  
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
14.12.2016, 12:35
scanf_s
В отличие от scanf и wscanf для scanf_s и wscanf_s требуется указать размер буфера для всех входных параметров типа c, C, s, S или наборы элементов управления строками, заключенные в [].
C++
1
2
    char str[10];
    scanf_s("%9s", str, 10);
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
14.12.2016, 13:56
Цитата Сообщение от Asinrus Посмотреть сообщение
но ввод некорректен
На картинке формат у scanf &25s а надо %49s
0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 27
14.12.2016, 18:05  [ТС]
Попытки реализовать через указатель не увенчались успехом (1 вложение)
Занос данных непосредственно в массив помог, но данные не записались в пайп(2-3 вложение)
Настройки пайпа : Daddy = CreateNamedPipe(AdresNameFile, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 1, 256, 256, NULL);
Пытался сделать присваивание PtrOnString после заноса данных - не помогает. Возникает ошибка при прочтении строки
Миниатюры
Не считываются данные с консоли   Не считываются данные с консоли   Не считываются данные с консоли  

0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 27
15.12.2016, 02:59  [ТС]
Проблема с записью в строку решена.
Теперь проблема передачи данных в канал.
решение проблемы
C++
1
2
3
4
5
6
7
8
char* PtrOnString;
    char string[50];
    
    bool connect=false;
    printf("Enter the mathematical expression: ");
    int i;
    PtrOnString = string;
    scanf_s("%49s", PtrOnString, 50);
отличие:
s в scanf маленькая, а не большая

Добавлено через 3 часа 47 минут
понял в чем ошибка - не могу реализовать ассинхроную передачу данных через пайп, то есть инициализацию OVERLAPPED/Не могу понять в чем беда


Добавлено через 6 минут
Все хорошо, прохожу дальше по проге. Так и должно быть
If the operation is asynchronous, ConnectNamedPipe returns immediately. If the operation is still pending, the return value is zero and GetLastError returns ERROR_IO_PENDING. (You can use the HasOverlappedIoCompleted macro to determine when the operation has finished.) If the function fails, the return value is zero and GetLastError returns a value other than ERROR_IO_PENDING or ERROR_PIPE_CONNECTED.

Добавлено через 1 час 16 минут
Нашел проблему в writefile
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* PtrOnString;
    TCHAR string[50];
    printf("Enter the mathematical expression: ");
    PtrOnString = string;
    _tscanf_s("%49s", PtrOnString, 50); 
    HANDLE hEvent =CreateEvent(NULL, TRUE, FALSE, NULL);
    OVERLAPPED l;
    l.hEvent = hEvent;
    l.Internal = 0;
    l.InternalHigh = 0;
    l.Offset = 0;
    l.OffsetHigh = 0;
    HANDLE Daddy;
    LPCSTR AdresNameFile = ("\\\\.\\pipe\\MyPipe");
    //LPWSTR AdresNameFile =TEXT ("C:\\Users\\Arkadii\\Desktop\\OS\\Data.txt");
    Daddy = CreateNamedPipe(AdresNameFile, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
        PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT,
        1, 128, 128,
        PIPE_UNLIMITED_INSTANCES,
        NULL);
    if (Daddy == INVALID_HANDLE_VALUE)
    {
        printf("Daddy's PIPE doesn't createeeeeeeeee");
        printf("  NNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
        system("pause");
        return GetLastError();
    };
    DWORD written;
    bool connect = ConnectNamedPipe(Daddy, &l);
    if (connect == false)
    {
 
        int i = GetLastError();
        if (i == 997 || i == 536)
        {
        }
        else {
            return GetLastError();
        };
    };
    if(!WriteFile(Daddy, PtrOnString,50,&written, &l));
    {
        printf("Error! Can not write in file\n");
        return GetLastError();
    };
Добавлено через 1 час 42 минуты
Проблема решена без использования ассинхроного буфера и прочего.
Просто ловкое использование WaitForSingleObject и Sleep.
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
15.12.2016, 07:18
Цитата Сообщение от Asinrus Посмотреть сообщение
s в scanf маленькая, а не большая
Цитата Сообщение от SSC Посмотреть сообщение
формат приема %s Вы не потеряли
Цитата Сообщение от SSC Посмотреть сообщение
На картинке формат у scanf &25s а надо %49s
А Вам о чем писали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2016, 07:18
Помогаю со студенческими работами здесь

Не считываются данные с формы
function sendCallBackData(){ var name = document.getElementById('name').value; var phone =...

Неправильно считываются данные
readln(n,m); for i:=1 to n do begin for j:=1 to m do begin read(input); mp.marked:=False; if...

Почему на считываются данные ?
Почему не считываються данные ? Парни помогите!!! Вроде все правильно, но он показывает как будто бы переменная пустая ... ...

Не считываются данные из файла в объект
Pass_order.h: #pragma once #include"Information_of_Order.h" class Pas_order :public Information_of_Order{ protected: int...

Какой командой считываются данные ?
Какой командой считываются данные из элементов HTML в ява скрипт... Например... Допустим я хочу умножить цифры которые вводит пользователь,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru