Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 04.09.2019, 20:20   #1
Мишанька
Новичок
 
Регистрация: 04.09.2019
Сообщений: 2
Репутация: 10
Злость Не могу найти ошибку в коде

Код написан на Си. После запуска кода необходимо ввести данные, типа "Office Microsoft 4 870". Таких строк надо ввести 3, но, после ввода первой строки в консоли, консоль предлагает нажать любую клавишу для выхода, не выполняя задачу и не выводя таблицу. Пытался найти ошибку в коде, но не могу. Вроде, все правильно. Код предсавлен ниже:

Код:
#include "pch.h"
#include <iostream>
#include <stdio.h>

int main()
{
	char name1[9], name2[9], name3[9];
	char cr1, cr2, cr3;
	int par1, par2, par3;
	int pr1, pr2, pr3;
	/* Введение фактических данных*/
	printf("1. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >");
    scanf_s("%s %c %d %u", name1, &cr1, &par1, &pr1);
	printf("2. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >");
    scanf_s("%s %c %d %u", name2, &cr2, &par2, &pr2);
	printf("3. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >");
	scanf_s("%s %c %d %u", name3, &cr3, &par3, &pr3);
	/* Вывод таблицы */
	/* вывод заголовков */
	printf("------------------------------------------------------------\n");
	printf("|Ofisnie pakety                                            |\n");
	printf("|----------------------------------------------------------|\n");
	printf("| Naimenovanie | Proizvoditel | Kolichestvo | Tsena        |\n");
	printf("|              |              | sost.chastey|  ($)         |\n");
	printf("|--------------|--------------|-------------|--------------|\n");
	/* вывод строк фактических данных */
	printf("| %9s | %c | %3d | %-5.1u |\n", name1, cr1, par1, pr1);
	printf("| %9s | %c | %3d | %-5.1u |\n", name2, cr2, par2, pr2);
	printf("| %9s | %c | %3d | %-5.1u |\n", name3, cr3, par3, pr3);
	/* вывод примечаний */
	printf("|----------------------------------------------|\n");
	printf("| Primechanie: Vozmozhno besplatno poluchit    |\n");
	printf("|        product StarOffice cherez Internet    |\n");
	printf("------------------------------------------------\n");
	return 0;
}

_____
Код программы нужно выделять (форматировать) тегами [CODE] [/CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 04.09.2019 в 21:51.
Мишанька вне форума   Ответить с цитированием
Старый 04.09.2019, 22:01   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,100
Репутация: 5675
По умолчанию

я не знаю С++, тем более все эти нюансы с чтением строк.
Думаю, что проблема в том, что несколько строк в одну команду так нельзя читать.
Посмотрите тут - https://www.includehelp.com/c/c-prog...-function.aspx
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 05.09.2019, 00:43   #3
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,499
Репутация: 1038
По умолчанию

Цитата:
Сообщение от Мишанька Посмотреть сообщение
Вроде, все правильно
Нет.
1) Первый параметр имеет тип %s, он при использовании scanf_s требует указать длину буфера
2) Второй параметр имеет тип %с, это один символ, а Вы, судя по данным, туда строку пытаетесь отправить.

Но до второго пункта не доходит, скорее всего
Black Fregat вне форума   Ответить с цитированием
Старый 05.09.2019, 19:13   #4
Мишанька
Новичок
 
Регистрация: 04.09.2019
Сообщений: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Нет.
1) Первый параметр имеет тип %s, он при использовании scanf_s требует указать длину буфера
2) Второй параметр имеет тип %с, это один символ, а Вы, судя по данным, туда строку пытаетесь отправить.

Но до второго пункта не доходит, скорее всего
А как указать длину буфера?
Изменил код, теперь он выводит половину таблицы, но я не могу ввести данные:
Код:
#include "pch.h"
#include <iostream>
#include <stdio.h>

int main()
{
	char name1[9], name2[9], name3[9];
	char cr1, cr2, cr3;
	int par1, par2, par3;
	int pr1, pr2, pr3;
	/* Введение фактических данных*/
    printf_s("1. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >\n");
    sscanf_s("%1000s %1000s %d %u", name1, &cr1, &par1, &pr1);
	printf_s("2. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >\n");
    sscanf_s("%1000s %1000s %d %u", name2, &cr2, &par2, &pr2);
	printf_s("3. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >\n");
	sscanf_s("%1000s %1000s %d %u", name3, &cr3, &par3, &pr3);
	/* Вывод таблицы */
	/* вывод заголовков */
	printf("------------------------------------------------------------\n"
		\
	"|Ofisnie pakety                                            |\n"
		\
	"|----------------------------------------------------------|\n"
		\
	"| Naimenovanie | Proizvoditel | Kolichestvo | Tsena        |\n"
		\
	"|              |              | sost.chastey|  ($)         |\n"
		\
    "|--------------|--------------|-------------|--------------|\n");
	/* вывод строк фактических данных */
	printf("| %9s | %s | %3d | %-5.1u |\n", name1, cr1, par1, pr1);
	printf("| %9s | %s | %3d | %-5.1u |\n", name2, cr2, par2, pr2);
	printf("| %9s | %s | %3d | %-5.1u |\n", name3, cr3, par3, pr3);
	/* вывод примечаний */
	printf("|----------------------------------------------|\n"
		\
	"| Primechanie: Vozmozhno besplatno poluchit    |\n"
		\
	"|        product StarOffice cherez Internet    |\n"
		\
	"------------------------------------------------\n");
	return 0;
}

Последний раз редактировалось Мишанька; 05.09.2019 в 22:10.
Мишанька вне форума   Ответить с цитированием
Старый 06.09.2019, 09:29   #5
WorldMaster
Профессионал
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Адрес: Россия, Мурманск
Сообщений: 2,319
Репутация: 705

icq: 359393755
По умолчанию

Нужно внимательнее читать мануалы от MS.

Код:
setlocale(LC_ALL, "Russian"); 
	char name1[10], name2[10], name3[10];
	char cr1[10], cr2[10], cr3[10];
	int par1=0, par2 = 0, par3 = 0;
	int pr1 = 0, pr2 = 0, pr3 = 0;
	
	/* Введение фактических данных*/
	printf_s("1. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >\n");
	scanf_s("%10s %10s %d %u", name1, (unsigned)_countof(name1), cr1, (unsigned)_countof(cr1), &par1, &pr1);	
	printf_s("2. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >\n");
	scanf_s("%10s %10s %d %u", name2, (unsigned)_countof(name2), cr2, (unsigned)_countof(cr2), &par2, &pr2);
	printf_s("3. Vvedite: Naimenovanie, proizvoditel, kolichestvo sost.chastey, tsena($) >\n");
	scanf_s("%10s %10s %d %u", name3, (unsigned)_countof(name3), cr3, (unsigned)_countof(cr3), &par3, &pr3);
	/* Вывод таблицы */
	/* вывод заголовков */
	printf("------------------------------------------------------------\n"
		\
		"|Ofisnie pakety                                            |\n"
		\
		"|----------------------------------------------------------|\n"
		\
		"| Naimenovanie | Proizvoditel | Kolichestvo | Tsena        |\n"
		\
		"|              |              | sost.chastey|  ($)         |\n"
		\
		"|--------------|--------------|-------------|--------------|\n");
	/* вывод строк фактических данных */
	printf("| %12s | %12s | %11d | %12u |\n", name1, cr1, par1, pr1);
	printf("| %12s | %12s | %11d | %12u |\n", name2, cr2, par2, pr2);
	printf("| %12s | %12s | %11d | %12u |\n", name3, cr3, par3, pr3);
	/* вывод примечаний */
	printf("------------------------------------------------------------\n"
		\
		   "|Primechanie: Vozmozhno besplatno poluchit                 |\n"
		\
		"|             product StarOffice cherez Internet           |\n"
		\
		"------------------------------------------------------------\n");
	return 0;
Изображения
 
__________________
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
Если помог - нажми на весы

Последний раз редактировалось WorldMaster; 06.09.2019 в 09:41.
WorldMaster вне форума   Ответить с цитированием
Старый 10.09.2019, 21:52   #6
Desc
Developer
ФорумчанинФорумчанин
 
Аватар для Desc
 
Регистрация: 21.11.2007
Адрес: Ukraine
Сообщений: 231
Репутация: 105
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
setlocale(LC_ALL, "Russian");
Это то здесь зачем? Как зайцу стоп-сигнал
Латиницей весь текст.
Человек только запутается.
__________________
Корректно сформулировал вопрос - приблизился к решению

Последний раз редактировалось Desc; 10.09.2019 в 21:58.
Desc вне форума   Ответить с цитированием
Старый 10.09.2019, 22:14   #7
WorldMaster
Профессионал
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Адрес: Россия, Мурманск
Сообщений: 2,319
Репутация: 705

icq: 359393755
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
Это то здесь зачем? Как зайцу стоп-сигнал
Ой да ладно. Я лишь слегка изменил его же собственный код. И привел в соответствие функцию scanf как в мануале.
В чем тут путаться?

У меня главный врач такой же. Когда к нему попадаются идеально сформулированные документы или когда он нихрена по тексту не понимает он начинает считать отступы и запятые.
Изображения
 
__________________
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
Если помог - нажми на весы

Последний раз редактировалось WorldMaster; 10.09.2019 в 22:18.
WorldMaster вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти у себя ошибку в коде. Буду благодарен, если вы сможете её найти Agent00x Windows Forms 4 25.11.2018 02:17
не могу найти ошибку в коде С++ kirillkucelap Помощь студентам 4 06.04.2014 19:03
Не могу найти ошибку в коде afirat Общие вопросы Delphi 7 28.12.2012 21:13
Не могу найти ошибку в коде sashmedv Паскаль 2 25.03.2012 08:31
не могу найти ошибку в коде pavelstraut Общие вопросы C/C++ 5 24.07.2009 23:20


20:05.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.