0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 10
1

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

03.12.2016, 22:24. Показов 1388. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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...

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

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

6
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
05.12.2016, 12:56 2
ну во-первых, нумерация массивов идет с нуля, а последний элемент имеет индекс 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  [ТС] 3
Спасибо, заработало . Но теперь проблема в том, что при поиске он выводит все номера сразу: идешь одного - выводит все номера, что были вписаны. Как можно это исправить ?
0
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
06.12.2016, 19:27 4
Hellsing616, кинь код и скрин консоли.
0
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 10
06.12.2016, 19:42  [ТС] 5
#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
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
06.12.2016, 23:30 6
Лучший ответ Сообщение было отмечено 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  [ТС] 7
Спасибо большое. Всё работает. В следующий раз всё сделаю как надо, я просто тут новенький
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2016, 00:10
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru