Тема: не працює код, допоможіть зрозуміти чому

Добрий ранок, написала ось такий код на С
(але він чомусь не працює, вибачте, що питаю про це(може це і банальщина), але просто вже дуже довго сиджу над цим завданням і ніяк не можу нормально написати код(...допоможіть, якщо не важко). Саме завдання: Подання десяткових чисел в римській системі.

Код:

#include <stdio.h> 
#include <stdlib.h> 


// Function to convert decimal to Roman Numerals
int printRoman(int number)
{
    int num[] = { 1,4,5,9,10,40,50,90,100,400,500,900,1000 };
    char sym[] = { 'I','IV','V','IX','X','XL','XC','C','CD','D','CM','M'};
    int i = 13;
    while (number > 0)
    {
        int div = number / num[i];
        number = number % num[i];
        while (div--)
        {
            printf("%s", *(sym + i));
        }
        i--;
    }
    return 0;
}
//Driver program
int main()
{
    int number;
    printf("Enter a number:");
    scanf_s("%d", &number);

    printRoman(number);

    return 0;
}

2 Востаннє редагувалося mamkin haker (23.11.2021 12:12:02)

Re: не працює код, допоможіть зрозуміти чому

щоб побачити в чому проблема натисніть на цей текст

main.c:9:24: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                        ^~~~
main.c:9:24: note: (near initialization for ‘sym’)
main.c:9:29: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                             ^~~
main.c:9:29: note: (near initialization for ‘sym’)
main.c:9:33: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                 ^~~~
main.c:9:33: note: (near initialization for ‘sym’)
main.c:9:38: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                      ^~~
main.c:9:38: note: (near initialization for ‘sym’)
main.c:9:42: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                          ^~~~
main.c:9:42: note: (near initialization for ‘sym’)
main.c:9:47: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                               ^~~~
main.c:9:47: note: (near initialization for ‘sym’)
main.c:9:52: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                                    ^~~
main.c:9:52: note: (near initialization for ‘sym’)
main.c:9:56: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                                        ^~~~
main.c:9:56: note: (near initialization for ‘sym’)
main.c:9:61: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                                             ^~~
main.c:9:61: note: (near initialization for ‘sym’)
main.c:9:65: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                                                 ^~~~
main.c:9:65: note: (near initialization for ‘sym’)
main.c:9:70: error: excess elements in char array initializer
    9 |     char sym[] = { "I","IV","V","IX","X","XL","XC","C","CD","D","CM","M"};
      |                                                                      ^~~
main.c:9:70: note: (near initialization for ‘sym’)
main.c:17:22: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
   17 |             printf("%s", *(sym + i));
      |                     ~^   ~~~~~~~~~~
      |                      |   |
      |                      |   int
      |                      char *
      |                     %d
main.c: In function ‘main’:
main.c:28:5: warning: implicit declaration of function ‘scanf_s’; did you mean ‘scanf’? [-Wimplicit-function-declaration]
   28 |     scanf_s("%d", &number);
      |     ^~~~~~~
      |     scanf

3 Востаннє редагувалося koala (23.11.2021 12:06:17)

Re: не працює код, допоможіть зрозуміти чому

Будь ласка, замість "чомусь не працює" описуйте конкретно, що відбувається: якщо компілятор повідомляє про помилку - про яку і де, якщо виводить щось не так - що саме і у відповідь на які дані. Звісно, якщо вас не влаштує відповідь "якщо чомусь не працює, то щось треба полагодити".

Подякували: mamkin haker1

4

Re: не працює код, допоможіть зрозуміти чому

вибачте, компілятор якраз не видає помилок в мене, але програма сама не працює, тобто вводжу я число і все, програма завершується, нічого не зробивши(

5 Востаннє редагувалося mamkin haker (23.11.2021 12:19:58)

Re: не працює код, допоможіть зрозуміти чому

яким компілятором користуєтесь?)
в якому середовищі?
яка операційна система?

звідки ви знаєте чи ваш алгоритм правильно працює?
приклад printf_c

#include<stdio.h>

int main()
{
   char c;
   printf("Enter a letter");
   scanf_s("%c", &c, 1);
   printf("%s",&c);
   return 0;
}

напишіть коректний код і приходьте якщо виникнуть запитання

6

Re: не працює код, допоможіть зрозуміти чому

використовую середовище Visual Studio 2019, windows 10,   
от я і не знаю чи все правильно зробила, бо код не працює, хоч компілятор в середовищі не видає помилок.
Так я ж і прийшла по допомогу(
пробачте, що забираю ваш час, я просто вже довго сиджу на тим завданням, от, а нормальний код написати не виходить(

7 Востаннє редагувалося lucas-kane (23.11.2021 13:07:19)

Re: не працює код, допоможіть зрозуміти чому

Що ви тут робите?

char sym[] = { 'I','IV','V','IX','X','XL','XC','C','CD','D','CM','M'};

8

Re: не працює код, допоможіть зрозуміти чому

ну це масив типо Римських чисел

9 Востаннє редагувалося lucas-kane (23.11.2021 13:08:22)

Re: не працює код, допоможіть зрозуміти чому

уважніше подивіться. компілятор вам говорить про помилки

10

Re: не працює код, допоможіть зрозуміти чому

lesivsolomiya написав:

Visual Studio 2019... не видає помилок

Дуже дивно. Може, не туди дивитеся? Чи показ помилок вимкнули?
Так чи інак

const int DIGITS_COUNT { 13 };
const int MAX_DIGIT_SIZE { 3 };
const char DIGITS[DIGITS_COUNT][MAX_DIGIT_SIZE] {"I", "IV", "V", "IX", "X", "XL", "XC", "C", "CD", "D", "CM", "M"};
const int VALUES[DIGITS_COUNT]                  { 1,   4,    5,   9,    10,  40,   50,   90,  100,  400, 500, 900, 1000 };

До речі, тепер видно, що одне значення пропустили.

11

Re: не працює код, допоможіть зрозуміти чому

lesivsolomiya написав:

використовую середовище Visual Studio 2019, windows 10,   
от я і не знаю чи все правильно зробила, бо код не працює, хоч компілятор в середовищі не видає помилок.
Так я ж і прийшла по допомогу(
пробачте, що забираю ваш час, я просто вже довго сиджу на тим завданням, от, а нормальний код написати не виходить(

Ну, тоді це загадка для всіх. Подивіться на приклади програмного коду тут, вже коли так ->

https://stackoverflow.com/questions/232 … n-numerals
(в коментарях/відповідях)

https://www.tutorialspoint.com/integer-to-roman-in-c
https://www.thecrazyprogrammer.com/2017 … l-c-c.html

12

Re: не працює код, допоможіть зрозуміти чому

Якщо коротко, то char -- це лише одна літера. String -- цеспецифічний array of chars. У вас в array sym набір не chars (напр. 'a', 'I'), а strings (напр. "abc", "XL").

Koala надав коректне рішення: const char DIGITS[DIGITS_COUNT][MAX_DIGIT_SIZE] це array of arrays, грубо кажучи.

13 Востаннє редагувалося ReAl (23.11.2021 14:28:34)

Re: не працює код, допоможіть зрозуміти чому

bebyk написав:

Якщо коротко, то char -- це лише одна літера. String -- цеспецифічний array of chars. У вас в array sym набір не chars (напр. 'a', 'I'), а strings (напр. "abc", "XL").

Koala надав коректне рішення: const char DIGITS[DIGITS_COUNT][MAX_DIGIT_SIZE] це array of arrays, грубо кажучи.

Ну під

printf("%s", *(sym + i));

цілком підійшло б і

char *sym[] = { "I", "IV", "V", "IX", "X", /* і так далі */ };

Це витратить трохи більше пам'яті даних, ніж варіант Koala, але не та задача і не той рівень, щоб про це думати.

14

Re: не працює код, допоможіть зрозуміти чому

Хоча я б об'єднав у

struct n_to_sym {
    int num;
    const char *sym;
};

const struct n_to_sym symtable[] = {
    { 1, "I"},
    { 4, "IV"},
    { 5, "V"},
    // ...
};

і йшов би по масиву структур.

Подякували: wander, koala2

15

Re: не працює код, допоможіть зрозуміти чому

всім дякую за відповідь)