Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 13.11.2019
Сообщений: 5

Ошибка сегментирования

03.03.2020, 20:11. Показов 2715. Ответов 6

Студворк — интернет-сервис помощи студентам
Написал программу, но при запуске появляется ошибка сегментирования. Как исправить?

Написать программу, которая для введѐнной с клавиатуры строки (максимальная длина строки – 20 символов) сообщает, какая цифра в ней встречается чаще всего, либо сообщает, что цифры в строке совсем отсутствуют. Если с одинаковой частотой в строке встретилось несколько цифр, то в качестве лидера вывести
любую из подходящих цифр. Для обхода строк использовать указатели.
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
#include<stdio.h>
#include<math.h>
 
int main(){
int max=0;
char ram[20];
printf("Введите строку не более 20 символов:\n");
scanf("%s",ram);
int score;
char *q=ram;
char *k=q;
char *ma;
while(*q !='\0'){
    score=0;
    k=ram;
    for( int i=0; i=sizeof(ram)-1;i++)
    {
        if(((short)*q)==(short)*k)
            score++;
        if((score>=max)&&((*q>0)&&(*q<10)))
            {
                max=score;
                ma=q;
            }
 
    k++;
    }
 *q++;
 
}
printf("%s",ma);
return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2020, 20:11
Ответы с готовыми решениями:

Ошибка сегментирования
В функцию void я передаю адрес массива строк, и в функциях void я уже работаю с адресом и побайтовым смещением значения адресной...

Ошибка сегментирования
Здравствуйте!)) Помогите, пожалуйста, найти ошибку сегментирования. #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main()...

Ошибка сегментирования
Добрый вечер. Есть код на C: #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main (void) { double a, b, c, d, x; printf...

6
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,194
03.03.2020, 21:32
Лучший ответ Сообщение было отмечено Happy_0 как решение

Решение

Цитата Сообщение от Happy_0 Посмотреть сообщение
C
1
for( int i=0; i=sizeof(ram)-1;i++)
Что это за странное условие цикла??? Это бесконечный цикл. Неудивительно, что происходит ошибка сегментирования. (И при чем здесь вообще sizeof(ram)?)

В чем заключается смысл этого цикла

Цитата Сообщение от Happy_0 Посмотреть сообщение
C
1
2
3
4
while(*q !='\0'){
  ...
 *q++;
}
??? Это тоже фактически бесконечный цикл, который в общем случае может завершиться только благодаря implementation-defined поведению.

Также, в чем смысл этого сравнения

Цитата Сообщение от Happy_0 Посмотреть сообщение
C
1
(*q>0)&&(*q<10)
? Что по-вашему такое *q?

Цитата Сообщение от Happy_0 Посмотреть сообщение
C
1
2
3
char ram[20];
printf("Введите строку не более 20 символов:\n");
scanf("%s",ram);
В массив размера 20 может поместиться строка длиной не более 19 символов. 19, а не 20.
1
0 / 0 / 0
Регистрация: 13.11.2019
Сообщений: 5
03.03.2020, 21:32  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И в чем же заключается смысл этого цикла

1
2
3
4
while(*q !='\0'){
  ...
 *q++;
}
???
Это цикл, котрый идет до последнего символа
C
1
'\0'
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,194
03.03.2020, 21:35
Цитата Сообщение от Happy_0 Посмотреть сообщение
Это цикл, котрый идет до последнего символа
'\0'
Да, вы правы. Меня сбило с толку наличие лишней *. Цикл, который идет до последнего символа, будет выглядеть так

C
1
2
3
4
while(*q !='\0'){
  ...
 q++;
}
Эта * там совершенно ни к чему, хоть это и не ошибка.
1
0 / 0 / 0
Регистрация: 13.11.2019
Сообщений: 5
03.03.2020, 21:51  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Также, в чем смысл этого сравнения
1
(*q>0)&&(*q<10)
? Что по-вашему такое *q?

По условия я должен был вести подсчет только цифр и чтобы отбросить буквы и другие знаки, я добавил это сравнение, только там надо было сделать так
C
1
(*q>0)&&(*q<9)
. Я знаю что можно провести сравнение через код символа, но захотел попробовать так. Скорее всего так и сделаю.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,194
03.03.2020, 21:54
Цитата Сообщение от Happy_0 Посмотреть сообщение
По условия я должен был вести подсчет только цифр и чтобы отбросить буквы и другие знаки, я добавил это сравнение, только там надо было сделать так
C
1
(*q>0)&&(*q<9)
. Я знаю что можно провести сравнение через код символа, но захотел попробовать так. Скорее всего так и сделаю.
Ваша строка - это строка. Она содержит символы цифр, а не арифметические значения цифр. Поэтому сравнивать их с 0 и 9 бессмысленно. Никакого 0 и 9 там нет и близко. (И почему вдруг строгие неравенства?)

Либо *q >= '0' && *q <= '9', либо (лучше) isdigit(*q). А у вас написана ерунда.
1
0 / 0 / 0
Регистрация: 13.11.2019
Сообщений: 5
03.03.2020, 22:17  [ТС]
Спасибо тебе огромное. Все заработало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2020, 22:17
Помогаю со студенческими работами здесь

Ошибка сегментирования
Никак не могу понять в чем же дело, выдает Ошибку сегментирования: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int*...

Ошибка сегментирования
Прошу помочь найти ошибку сегментирования в коде. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #define NMAX 10 ...

Ошибка сегментирования
Здравствуйте. Есть код, который по введенной дате определяет, сколько осталось рабочих смен до конца месяца. Код компилится, но при запуске...

Ошибка сегментирования
доброй ночи! при компиляции возникает ошибка сигментирования . Никто не подскажет в чем дело ? =\ #include &lt;time.h&gt; ...

Ошибка сегментирования
Помогите разобраться, код компилируется, но когда запускаю вылетает ошибка сегментирования. #include &lt;stdio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru