| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2856 人关注过本帖
标题:求解strcmp函数只能比较gets()语句而不能比较fgets(a,sizeof(a),stdin)吗?
只看楼主 加入收藏
qq7918640
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2017-11-26
收藏
得分:0 
感谢
2018-01-04 17:20
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
收藏
得分:0 
我找到原因了
查了一下手册,strcmp函数相等时返回0,大于时返回1,小于是返回-1.
鬼出在了fgets函数,它往数组里多加了一个'\n'
图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2018-1-4 17:38编辑过]

2018-01-04 17:35
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
收藏
得分:0 
改成gets(c);就不会出错了。
2018-01-04 17:41
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
收藏
得分:0 
效果图
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-01-04 17:43
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
#define N 20
int main()
{
    FILE*fp;
    char a;
    char mima[N]="yanglei10086";
    char c[N]={0};
    printf("请输入密码:\n");
    gets(c);
    if(strcmp(c,mima)==0)
    printf("登陆成功\n");
    else
    {
    printf("登陆失败\n");
    printf("按任意键退出\n");
    getch();
    exit(0);
    }
    if((fp=fopen("ceshi.txt","w"))==NULL)
    {
        printf("打开失败\n");
        exit(0);
    }
    printf("文件已打开,请输入内容:\n");
    a=getchar();
    while(a!='\n')
    {
        fputc(a,fp);
        a=getchar();
    }
    fclose(fp);
    return 0;

 }  
2018-01-04 17:49
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
说到这个问题,同2楼~
因此在缓冲区没满的情况下通常会把做后一个'\n改为'\0'~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-01-04 19:51
min624132806
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2017-2-20
收藏
得分:0 
如何修改成输入字符,也报错,请重新输入?
#include<stdio.h>
#define MAX 10
#define MIN 0
#define N '\n'
#define D 5
int main (void)
{
    int unm[5];
    int i,j,t;
    printf("请输入五个数:");
    printf("%c",N);
    for(i=0;i<D;i++)
    {
        printf("请输入%d数:",i+1);
        scanf("%d",&unm[i]);
        while(unm[i]>MAX||!unm[i]<MIN)
        {
            printf("输入有误,请从新输入:");
            scanf("%d",&unm[i]);
        }
    }
    printf("输入的5位数是:");
    for(i=0;i<D;i++)
        printf("%d  ",unm[i]);
    putchar(N);
    for(i=0;i<D;i++)
        for(j=0;j<D;j++)
        {
            if(unm[i]<unm[j])
                t=unm[j],unm[j]=unm[i],unm[i]=t;
        }
    printf("输入的5位数排序后是:");
    for(i=0;i<D;i++)
        printf("%d  ",unm[i]);
    printf("%c",N);
}
2018-01-07 10:28
快速回复:求解strcmp函数只能比较gets()语句而不能比较fgets(a,sizeof(a),stdin ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017970 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved