Программа выдает мусор при запросе телефона - C (СИ)
Формулировка задачи:
Добрый день! Проблема заключаеться в том, что при сравнении телефона, даже не доходя до этого , выдает мусор при запросе телефона(вел 12345, выдало 246..). В чем беда? Последняя функция: При вводе с клавиатуры 5-ти значных чисел, функция scanf должна считать это в массив, но считывает муссор.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define N 2
struct znayomiy{
char fname[50];
int number;
char misto[50];
char vul[50];
int bud;
int kv;
};
void FillingStructure(struct znayomiy * person);
void poisk(struct znayomiy * person);
void poisk2(struct znayomiy * person);
//void tel(struct znayomiy * person);
int main()
{
setlocale(LC_ALL, "rus");
struct znayomiy * person = (struct znayomiy*)malloc(N * sizeof(struct znayomiy));
FillingStructure(person);
poisk(person);
poisk2(person);
free(person);
return 0;
}
void FillingStructure(struct znayomiy * person)
{
int i;
for (i=0;i<N;i++)
{
printf("ВВедите Фамилию человека: \n");
gets(person[i].fname);
printf("ВВедите город: \n");
gets(person[i].misto);
printf("ВВедите улицу \n");
gets(person[i].vul);
printf("ВВедите номер дома: \n");
scanf("%d",&person[i].bud);
printf("Введите квартиру: \n");
scanf("%d",&person[i].kv);
printf("ВВедите 5-ти значный номер телефона: \n");
scanf("%d",&person[i].number); getchar();
}
printf("Исходные данные: \n");
for (i = 0; i<N;i++)
{
printf("Фамилия: %s\n Номер телефона: %d \n Город: %s \n Улица: %s \n Дом: %d \n Квартира: %d\n",person[i].fname,person[i].number,person[i].misto,person[i].vul,person[i].bud,person[i].kv);
}
}
void poisk(struct znayomiy * person)
{
{
int i;
int none2=0;
char strt[100];
printf("\n Please, enter the name of street, you want to know who lives on\n");
scanf("\n%s", strt);
puts("\n");
printf("On the %s street lives:", strt);
for(i=0;i<N;i++)
{
if(strcmp(strt, person[i].vul)==0)
{
printf("\n %s", person[i].fname);
none2++;
}
}
if(none2==0)
{
printf("\n Nobody lives on the entered street");
}
}
}
void poisk2(struct znayomiy * person)
{
{
int i;
int none2=0;
int numbers[10];
printf("\n Please, enter the number\n");
scanf("\n%d", &numbers);
puts("\n");
printf("On the %d numbers persons:", numbers);
for(i=0;i<N;i++)
{
if(strcmp(numbers, person[i].number)==0)
{
printf("\n %s", person[i].fname);
none2++;
}
}
if(none2==0)
{
printf("\n Nobody numbers");
}
}
}{
int i;
int none2=0;
int numbers[10];
printf("\n Please, enter the number\n");
scanf("\n%d", &numbers);
puts("\n");
printf("On the %d numbers persons:", numbers);
for(i=0;i<N;i++)
{
if(strcmp(numbers, person[i].number)==0)
{
printf("\n %s", person[i].fname);
none2++;
}
}
if(none2==0)
{
printf("\n Nobody numbers");
}
}Решение задачи: «Программа выдает мусор при запросе телефона»
textual
Листинг программы
{
int i;
int none2=0;
int numbers;
printf("\n Please, enter the number\n");
scanf("\n%d", &numbers);
puts("\n");
printf("On the %d numbers persons:", numbers);
for(i=0;i<N;i++)
{
if(numbers == person[i].number)
{
printf("\n %s", person[i].fname);
none2++;
}
}
if(none2==0)
{
printf("\n Nobody numbers");
}
}
Объяснение кода листинга программы
- Объявлены три переменные:
i,none2иnumbers. - Выводится запрос на ввод номера телефона.
- Пользователь вводит номер телефона с помощью функции
scanf. - Выводится сообщение
On the numbers persons:с помощью функцииprintf. - Переменная
iинициализируется нулем и используется в циклеfor, который выполняется до тех пор, покаiменьше N. - Внутри цикла проверяется, равен ли номер телефона
numbersномеру телефона в массивеperson[i]. - Если номера совпадают, то выводится имя человека с помощью функции
printf. - Переменная
none2увеличивается на единицу каждый раз, когда находится совпадение. - После окончания цикла проверяется значение переменной
none2. - Если
none2равно нулю, то выводится сообщениеNobody numbersс помощью функцииprintf.