Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Код написан на Си. После запуска кода необходимо ввести данные, типа "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 в 20:51.
Мишанька вне форума Ответить с цитированием
Старый 04.09.2019, 21:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

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

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

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

Цитата:
Сообщение от 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 в 21:10.
Мишанька вне форума Ответить с цитированием
Старый 06.09.2019, 08:29   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Нужно внимательнее читать мануалы от 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;
Изображения
Тип файла: png 123.png (28.8 Кб, 55 просмотров)
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 06.09.2019 в 08:41.
WorldMaster вне форума Ответить с цитированием
Старый 10.09.2019, 20:52   #6
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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