Программа выдает мусор при запросе телефона - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д