首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与strcpy和散列表搏斗

与strcpy和散列表搏斗
EN

Stack Overflow用户
提问于 2020-12-26 01:02:27
回答 1查看 150关注 0票数 0

我有个关于哈希的建议。我已经完成了我的工作。至少我觉得如此..。无论如何,我的职责是创建一个结构并使用哈希表对其进行索引。我已经完成了所有的功能等等,但是当我想要输入到我的struct文件时,停止工作并完成程序。那是什么原因呢?

这是我的密码:

代码语言:javascript
复制
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
    int musteri_no;
    char ad[20], soyad[20];
} Musteri;
Musteri *veri_liste[10];
int hash_tablo[10][2];

//Hash tablosuna istenilen şekilde veri koyan fonksiyon
void put(int musteri_no,Musteri* musteri){
    printf("Calisii");
    while(true){
        if(hash_tablo[musteri_no%10][0]==-1){
            hash_tablo[musteri_no%10][0]=musteri_no;
            veri_liste[musteri_no%10]=musteri;
            printf("Calisii");
        }
        else{
            for(int i=0;i<10;i++){
                if(hash_tablo[i][1]!=-1){
                    continue;
                    printf("Calisii");
                }
                else{
                    printf("Calisii");
                    hash_tablo[musteri_no%10][1]=i;
                    hash_tablo[i][0]=musteri_no;
                    
                }
            }
        }
    }
}
void search(int musteri_no){
    int i=1,kontrol=hash_tablo[musteri_no%10][1];
    printf("%d : Aranilan deger",musteri_no);
    while(i<=1){
        if(hash_tablo[musteri_no%10][0] == musteri_no){
            printf("%d %s %s",veri_liste[musteri_no%10]->musteri_no,veri_liste[musteri_no%10]->ad,veri_liste[musteri_no%10]->soyad);
            printf("%d Adimda bulundu",i);
            break;
        }
        else{
            if(i==1){
                i++;
                if(hash_tablo[kontrol][0]==musteri_no){
                    printf("%d %s %s",veri_liste[kontrol]->musteri_no,veri_liste[kontrol]->ad,veri_liste[kontrol]->soyad);
                    printf("%d Adimda bulundu",i);
                    break;
                }
                else{
                    kontrol=hash_tablo[kontrol][1];
                }
            }
            else{
                i++;
                if(hash_tablo[kontrol][0]==musteri_no){
                    printf("%d %s %s",veri_liste[kontrol]->musteri_no,veri_liste[kontrol]->ad,veri_liste[kontrol]->soyad);
                    printf("%d Adimda bulundu",i);
                    break;
                }
                else{
                    kontrol=hash_tablo[kontrol][1];
                }
            }
        }
    }
}
void delete_value(int musteri_no){
    for(int i=0;i<10;i++){
        if(hash_tablo[i][0]==musteri_no){
            hash_tablo[i][0]=-1;
        }
        else{
            continue;
        }
    }
}
void hash_list(){
    for(int i=0;i<10;i++){
            printf("%d %d\n",hash_tablo[i][0],hash_tablo[i][1]);
    }
                            
}
void data_list(){
    for(int i=0;i<10;i++){
        if(veri_liste[i]==NULL){
            continue;
        }
        else{
            printf("%d %s %s\n",veri_liste[i]->musteri_no,veri_liste[i]->ad,veri_liste[i]->soyad);
        }
    }
}
int main(){
    Musteri* gecici_m;
    char isim[20],soyisim[20];
    int musteri_no;
    for(int i=0;i<10;i++){
        for(int j=0;j<2;j++){
            hash_tablo[i][j]=-1;
        }
    }
    printf("Musteri no giriniz:");
    scanf("%d",&musteri_no);
    printf("İsim giriniz:");
    scanf("%s",&isim);
    printf("Soyisim giriniz:");
    scanf("%s",&soyisim);
    strcpy(gecici_m->ad,isim);
    strcpy(gecici_m->soyad,soyisim);
    gecici_m->musteri_no=musteri_no;
    put(musteri_no,gecici_m);
    printf("Hash list:\n");
    hash_list();
    printf("Data list:\n");
    data_list();`
}

我会给你所有的代码,因为我不知道这里有什么问题。非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-26 03:27:06

除了使用@dxiv已经指向的未分配指针之外,您还从代码中出现了以下错误。

1)

C:在函数‘

’中:

main.c:23:11:错误:“true”未声明(在此函数中首次使用)

同时(真){

^~ main.c:23:11:注意:每个未声明的标识符只报告一次它出现在

在函数‘main’中:

main.c:118:13:警告:格式‘%s’期望类型为‘char*’的参数,但参数2的类型为‘char(*)20’-Wformat=

scanf("%s",&isim);

^ main.c:120:13:警告:格式‘%s’期望类型为‘char*’的参数,但参数2的类型为‘char(*)20’-Wformat=

scanf(%s,&soyisim);

^ main.c:128:17:错误:流浪‘’ in program data_list();^

有两个警告抱怨您使用%s预期参数类型为‘char*’,但参数2的类型为‘char(* )20

你得按下面的方式解决这些问题。

代码语言:javascript
复制
scanf("%s",isim);
scanf("%s",soyisim);

其他的看起来像一些错误和隐藏的代码,请纠正它们。

在您的程序中还有其他问题领域。

在使用

  1. 之前,还需要为Musteri *veri_liste[10];分配内存,否则程序行为是未定义的。

  1. --您的void put(int musteri_no,Musteri* musteri)函数在while(true)中运行,您还没有为它处理任何终止点,如果没有它,您的代码将运行到无限循环中。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65452946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档