a1296715528 发表于 2018-2-7 10:07:36

为什么gets总是返回NULL 并且循环还不执行?

本帖最后由 a1296715528 于 2018-2-7 11:31 编辑

刚学了文件,编了个图书馆,然后发现个bug...大佬请出招

Int auth(void)
{       
        char ch;

        fp1 = fopen("keyboard.dat", "r+b");
       
        printf("请输入密码:");
        while (gets(ch) == NULL);
        {
                printf("输入失败,请重新输入\n");
        }
        getch();
       
        rewind(fp1);
        fread(c, sizeof(ch), 1, fp1);
       
        fclose(fp1);
        return strcmp(ch, c);
       
}

BngThea 发表于 2018-2-7 10:11:23

ch没定义,gets需要接受一个地址作为参数

a1296715528 发表于 2018-2-7 11:31:03

BngThea 发表于 2018-2-7 10:11
ch没定义,gets需要接受一个地址作为参数

哦哦哦 我忘了加了   ch 是全局变量

BngThea 发表于 2018-2-7 11:33:47

a1296715528 发表于 2018-2-7 11:31
哦哦哦 我忘了加了   ch 是全局变量

那就 &ch
还是少用gets吧

a1296715528 发表于 2018-2-7 12:29:50

BngThea 发表于 2018-2-7 11:33
那就 &ch
还是少用gets吧

......ch是数组,不用取址

BngThea 发表于 2018-2-7 12:37:53

a1296715528 发表于 2018-2-7 12:29
......ch是数组,不用取址

可能你是代码其他部分有输入,导致输入流中存在字符,gets失败

最终的执念 发表于 2018-2-7 13:44:27

本帖最后由 最终的执念 于 2018-2-7 13:46 编辑

用scanf试试

a1296715528 发表于 2018-2-9 11:36:27

BngThea 发表于 2018-2-7 12:37
可能你是代码其他部分有输入,导致输入流中存在字符,gets失败

不对欸就算用局部变量也不行,也是返回NULL

a1296715528 发表于 2018-2-9 11:37:22

最终的执念 发表于 2018-2-7 13:44
用scanf试试

scanf不支持空字符的输入这样.....怎么说呢! 感觉少了点什么{:5_109:}

最终的执念 发表于 2018-2-17 10:00:11

a1296715528 发表于 2018-2-9 11:37
scanf不支持空字符的输入这样.....怎么说呢! 感觉少了点什么

fgetc 自己输入字符串

h5681901 发表于 2021-2-10 21:04:23

可以用字符串比较函数strcmp或者ctrncmp
页: [1]
查看完整版本: 为什么gets总是返回NULL 并且循环还不执行?