Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С) / 8 сообщений из 8, страница 1 из 1
13.12.2017, 00:05
    #39568715
Karassu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
Код: plaintext
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <ctype.h>
int main()
{
    setlocale(LC_ALL,"rus");
    char Name_s[20];
    int i,n,t,j,z,p;
    float max_s,max_r,min_o;
    printf("\n Введите кол-во товаров ");
    scanf("%d",&n);
    struct TOVAR
    {
        char Name[20];
        char Cont[20];
        char Part[15];
        int S_Obs;
        int R_Obs;
        float Price;
    }mas[n];
    for(i=0;i<n;i++)
    {
        printf("\n Номер товара -%d",i+1);
        printf("\n Введите имя товара ");
        scanf("%s",mas[i].Name);

        printf("\n Введите страну ");
        scanf("%s",mas[i].Cont);

        printf("\n Введите партию ");
        scanf("%s",mas[i].Part);

        printf("\n Введите общие количество ");
        scanf("%d",&mas[i].S_Obs);

        printf("\n Введите количество расфасовки ");
        scanf("%d",&mas[i].R_Obs);

        printf("\n Введите цену товара ");
        scanf("%f",&mas[i].Price);
    }
    printf("\n Товар    \t \t Страна    \t \t Партия    \t \t Общее кол-во \t \t Кол-во расфасовки \t \t Цена");
    for(i=0;i<n;i++)
    {
        printf("\n %-20s",mas[i].Name);
        printf("\t %-20s",mas[i].Cont);
        printf("\t %-20s",mas[i].Part);
        printf("\t %-20d",mas[i].S_Obs);
        printf("\t %-20d",mas[i].R_Obs);
        printf("\t         %-20.2f",mas[i].Price);
    }
    t=0;
    for(j=1;j<n;j++)
    {
        max_s=mas[0].Price*mas[0].S_Obs;
        if((mas[j].Price*mas[j].S_Obs)>max_s)
        {
            max_s=mas[j].Price*mas[j].S_Obs;
            t=j;
            strcpy(Name_s,mas[j].Name);
        }
    }
    printf("\n Страна, в которую экспортируется товар на максимальную сумму - %s",mas[t].Cont);
    //////////////////////////////////////////////////////////////////////
    printf("\n Список стран, в которые этот товар экспортируется:");
    for(i=0;i<n;i++)
        if(!strcmp(Name_s,mas[i].Name));
            printf("\n %s",mas[i].Cont);
    //////////////////////////////////////////////////////////////////////
    max_r=mas[0].R_Obs;
    z=0;
    min_o=mas[0].S_Obs;
    p=0;
    for(j=1;j<n;j++)
    {
        if(mas[j].R_Obs>max_r)
        {
            max_r=mas[j].R_Obs;
            z=j;
        }
        if(mas[j].S_Obs<min_o)
        {
            min_o=mas[j].S_Obs;
            p=j;
        }
    }
     printf("\n Товар с наибольшим обьёмом росфасовки - %s",mas[z].Name);
    printf("\n Товар с наименьшим обьёмом партии - %s",mas[p].Name);
    return 0;
}



В подчёркнутом отрезке кода возникает проблема с выводом, и выводит лишь взятый в квадратную рамочку вопросительный знак. Что это может значить? Заранее благодарю за ваш ответ.
...
Рейтинг: 0 / 0
13.12.2017, 00:48
    #39568728
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
Karassu,

Такая строка в Cont. Замени %s на %d и посмотри, какие символы (их коды) в Cont[0] и в [1]. Сам увидишь.
...
Рейтинг: 0 / 0
13.12.2017, 01:36
    #39568735
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
Код: sql
1.
2.
3.
scanf("%d",&n);
.....
}mas[n];


По-моему эта программа даже компилироваться не должна. Или Си уже научился создавать
массивы заранее неизвестной длины?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2017, 10:25
    #39568828
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
Karassu printf("\n Товар с наибольшим обьёмом росфасовки - %s",mas[z].Name);
printf("\n Товар с наименьшим обьёмом партии - %s",mas[p].Name);


Расстрелять. Из ржавого пистолета. Не сразу насмерть, так от заражения крови помрет.
...
Рейтинг: 0 / 0
13.12.2017, 10:42
    #39568842
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
Dimitry Sibiryakov
Код: sql
1.
2.
3.
scanf("%d",&n);
.....
}mas[n];


По-моему эта программа даже компилироваться не должна. Или Си уже научился создавать
массивы заранее неизвестной длины?..


Научился.
...
Рейтинг: 0 / 0
13.12.2017, 10:51
    #39568850
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
Karassu,

Это недопустимый символ в данной кодировке.

Варианта два: либо там в выводимой строке у тебя вообще какая-то несимвольная информация записана (не заполненная строка, строка без завершающего '\0' или ещё что-то плохое), либо выводимая строка заполнена нормально, но в ней находится символ, не представимый в кодировке консоли, в которой работает программа (например, символ номера "№" из cp1251, которого нет в cp866 или что-то подобное)

Можно проверить, посимвольно вывести перед этим код каждого символа из строки

Код: plaintext
1.
2.
for ( unsigned i = 0; i < strlen(s); ++i )
   printf( " [%x]", int(s[i]) );
...
Рейтинг: 0 / 0
13.12.2017, 10:53
    #39568851
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
schiKarassu printf("\n Товар с наибольшим обьёмом росфасовки - %s",mas[z].Name);
printf("\n Товар с наименьшим обьёмом партии - %s",mas[p].Name);


Расстрелять. Из ржавого пистолета. Не сразу насмерть, так от заражения крови помрет.

Какие проблемы?
Выражался бы ты яснее...


P.S. Всё же "росфасовки" пишется как "расфасофки".
...
Рейтинг: 0 / 0
13.12.2017, 12:06
    #39568901
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С)
MasterZivнапример, символ номера "№" из cp1251, которого нет в cp866Alt+252
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Требуеться помощь с поиском ошибки в написании вывода строки/строк текста(язык С) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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