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

Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку

03.12.2016, 22:24. Показов 1691. Ответов 6
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно начали изучать c++. так как в школе не было программирования (преподу пофиг было) я в универе отстаю ;c Написал программу по заданию (задание будет ниже и код тоже), но выходит ошибка (скрин прикрепил). Помогите новичку разобраться.
ЗАДАНИЕ : Написать программу, запрашивающую информацию о именах, фамилиях, адресах и телефонах абонентов и печатающую эту информацию в виде таблицы (использовать тип – структуру и ограничиться вводом данных о пяти абонентах). По запросу пользователя программа должна выдавать информацию о телефоне абонента по введенной фамилии и имени. В случае отсутствия информации, программа должна сообщать: “Такого абонента нет.” Для задания данных использовать тип struct.
Мои, так сказать, попытки написать код:
C++ (Qt)
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
#include <iostream>
#include <cstdio>
#include <string>
#include <stdio.h>
#include <fstream>
using namespace std; 
struct book {
char fam[25];
char im[15];
char adress[100];
int phone;} lib[5];
 
int main(int argc, char*argv[])
{
int n;
cout<<"the number of subscribers: ";
cin>>n;
for (int i=1; i<=n; i++)
{cout<<"Enter  subscriber's name "<<endl; cin>>lib[i].im;
cout<<"Enter subscriber's surname"<<endl; cin>>lib[i].fam;
cout<<"Enter the adress without spaces or commas"<<endl; cin>>lib[i].adress;
cout<<"enter a phone number "<<endl; cin>>lib[i].phone;
}
for (int i=1; i<=n; i++)
cout<<lib[i].im<<" "<<lib[i].fam<<" "<<lib[i].adress<<" "<<lib[i].phone<<endl;
char* a,*b;
int i,j,k;
int t=1;
cout<<"Enter a name and a surname of subscriber who want to find  "; cin>>a>>b;
for (i=1; i<=n; i++) {
if (strlen(a)==strlen(lib[i].im)) {
for (j=1; j<=strlen(a); j++)
if (a[j]!=lib[i].im[j]) { t=0; break;}}
if (strlen(b)==strlen(lib[i].fam)) {
for (k=1; k<=strlen(b); k++)
if (b[j]!=lib[i].fam[k]) { t=0; break;}}
if (t=1) {cout<<lib[i].phone;}}
if (t=0) cout<<"not found";
getchar(); getchar();
return 0;
}
скрин ошибки
Миниатюры
Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2016, 22:24
Ответы с готовыми решениями:

Когда ввожу в файл данные с пробелом - выдает ошибку
Если ввожу свою фамилию &quot;Баринов&quot; - ошибку не выдает, если ввожу &quot;Баринов Филипп&quot; - начинается куча сообщений в консоли. Конкретно...

Не могу найти ошибку в коде, когда ввожу то переменная принимаєт только 1 символ. ето програма телефонная книг
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;fstream&gt; using namespace...

Когда нажимаю добавить элемент, и уже его ввожу, то вылетает ошибка и закрываеться программа
Есть такая программулька: //class_sets.h using namespace std; class Set { private: struct SetElement { enum {ATOM, SET}...

6
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
05.12.2016, 12:56
ну во-первых, нумерация массивов идет с нуля, а последний элемент имеет индекс n-1, где n- длинна массива. потому когда ты пишешь в цикле условие i<=n, цикл выходит за границу массива. переделай все циклы по типу
C++
1
for (i=0; i<n; i++)
во вторых, ты пытаешься применить функцию strlen() к указателю на char, в то время как ее аргументом должна быть си-строка. поменяй 26-ю строку на
C++
1
char a[15], b[25]
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 10
06.12.2016, 16:41  [ТС]
Спасибо, заработало . Но теперь проблема в том, что при поиске он выводит все номера сразу: идешь одного - выводит все номера, что были вписаны. Как можно это исправить ?
0
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
06.12.2016, 19:27
Hellsing616, кинь код и скрин консоли.
0
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 10
06.12.2016, 19:42  [ТС]
#include <iostream>
#include <cstdio>
#include <string>
#include <stdio.h>
#include <fstream>
using namespace std;
struct book {
char fam[25];
char im[15];
char adress[100];
int phone;} lib[5];

int main(int argc, char*argv[])
{
int n;
cout<<"the number of subscribers: ";
cin>>n;
for (int i=0; i<n; i++)

{cout<<"Enter subscriber's name "<<endl; cin>>lib[i].im;
cout<<"Enter subscriber's surname"<<endl; cin>>lib[i].fam;
cout<<"Enter the adress without spaces or commas"<<endl; cin>>lib[i].adress;
cout<<"enter a phone number "<<endl; cin>>lib[i].phone;
}
for (int i=0; i<n; i++)

cout<<lib[i].im<<" "<<lib[i].fam<<" "<<lib[i].adress<<" "<<lib[i].phone<<endl;
char a[15], b[25];
int i,j,k;
int t=1;
cout<<"Enter a name and a surname of subscriber who want to find "; cin>>a>>b;
for (i=0; i<n; i++) {
if (strlen(a)==strlen(lib[i].im)) {
for (j=1; j<=strlen(a); j++)
if (a[j]!=lib[i].im[j]) { t=0; break;}}
if (strlen(b)==strlen(lib[i].fam)) {
for (k=1; k<=strlen(b); k++)
if (b[j]!=lib[i].fam[k]) { t=0; break;}}
if (t=1) {cout<<lib[i].phone;}}
if (t=0) cout<<"not found";
getchar(); getchar();
return 0;
}
Миниатюры
Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку  
0
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
06.12.2016, 23:30
Лучший ответ Сообщение было отмечено Hellsing616 как решение

Решение

сразу 3 ошибки
1) главная- не путай условие равенства с присваиванием. неправильно:
C++
1
2
if (t=1) {cout<<lib[i].phone;}}
if (t=0) cout<<"not found";
правильно:
C++
1
2
if (t==1) {cout<<lib[i].phone;}}
if (t==0) cout<<"not found";
2)основная- проверочная переменная (кстати, неплохо было бы сделать ее булевой вместо int-а) должна принимать истинное значение перед проверкой каждой записи. неправильно:
C++
1
2
3
int t=1;
cout<<"Enter a name and a surname of subscriber who want to find "; cin>>a>>b;
for (i=0; i<n; i++) {...}
правильно:
C++
1
2
3
int t;
cout<<"Enter a name and a surname of subscriber who want to find "; cin>>a>>b;
for (i=0; i<n; i++) {t=1;...}
3) ключевая- итератор в условии должен соответствовать итератору в цикле. неправильно:
C++
1
2
for (k=1; k<=strlen(b); k++)
if (b[j]!=lib[i].fam[k]) { t=0; break;}}
правильно:
C++
1
2
for (k=1; k<=strlen(b); k++)
if (b[k]!=lib[i].fam[k]) { t=0; break;}}
итогово, вот исправленный кусок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char a[15], b[25];
    int i, j, k;
    bool t;
    cout << "Enter a name and a surname of subscriber who want to find "; cin >> a >> b;
    for (i = 0; i<n; i++) {
        t = true;
        if (strlen(a) == strlen(lib[i].im)) {
            for (j = 0; j < strlen(a); j++)
                if (a[j] != lib[i].im[j]) { t = false; break; }
        }
        if (strlen(b) == strlen(lib[i].fam)) {
            for (k = 0; k < strlen(b); k++)
                if (b[k] != lib[i].fam[k]) { t = false; break; }
        }
        if (t) { cout << lib[i].phone; break; }
    }
    if (!t) cout << "not found";
P.S.- будь другом, используй теги когда постишь код, а сам код форматируй согласно общепринятым нормам. глаза ж сломать можно.
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 10
07.12.2016, 00:10  [ТС]
Спасибо большое. Всё работает. В следующий раз всё сделаю как надо, я просто тут новенький
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2016, 00:10
Помогаю со студенческими работами здесь

В терминале когда ввожу Is , пишет что команда не найдена
Прошу извинить если вопрос сильно донный, просто только поставил еще до конца не разобрался

Почему когда тычу в экзешник мышью, получаю один результат, а когда запускаю его из MSVS- другой?
Друзья! Предлагаю провести небольшой эксперимент. Создайте ПРОСТЕЙШИЙ проект &quot;Приложение Windows Form&quot;. Теперь сделайте так,...

Когда запускаю свой диск /f он пишет Нет доступа к /F.Файл или папка повреждены,чтение невозможно
Здравствуйте у меня та же беда Когда запускаю свой диск /f он пишет Нет доступа к /F.Файл или папка повреждены,чтение невозможно. ...

Когда запускаю на другом компьютере,где нет С++ Builder а выбивает ошибку
Сделал все как прочитал на форуме убрал Project-&gt;Options-&gt;Packages-&gt;Build with runtimes packages и Linker-&gt;Use dynamic RTl а выбивает...

исполняемые файлы открываются в блокноте, а когда ввожу в реестр изменения пишет: не удалось произвести импорт т. к. разделы реестра заняты систем
Здесь показаны две проблемы. На первую дан ответ, а вторая как-бы прошла не замеченной. А именно: &quot;...не удалосьпроизвести импорт т.к....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru