Программа выдает мусор при запросе телефона - 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");
    }
}

Объяснение кода листинга программы

  1. Объявлены три переменные: i, none2 и numbers.
  2. Выводится запрос на ввод номера телефона.
  3. Пользователь вводит номер телефона с помощью функции scanf.
  4. Выводится сообщение On the numbers persons: с помощью функции printf.
  5. Переменная i инициализируется нулем и используется в цикле for, который выполняется до тех пор, пока i меньше N.
  6. Внутри цикла проверяется, равен ли номер телефона numbers номеру телефона в массиве person[i].
  7. Если номера совпадают, то выводится имя человека с помощью функции printf.
  8. Переменная none2 увеличивается на единицу каждый раз, когда находится совпадение.
  9. После окончания цикла проверяется значение переменной none2.
  10. Если none2 равно нулю, то выводится сообщение Nobody numbers с помощью функции printf.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы