标题:c语言入门题,身份证的奥秘
只看楼主
水色苔
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-11-17
得分:7 
回复 9楼 linlulu001
搭车同问
能帮我看看我的问题出在哪么
程序代码:
#include<stdio.h>
#include<string.h>
int check(char a[]);
int main(void)
{   int i,j,n,l;
    char a[20];
    scanf("%d ",&n);
    for ( i = 0; i < n; ++i)
        {
            gets(a);
            l=strlen(a);
            if(l==15)
            {
                for(j=14;j>5;j--)
                    a[j+2]=a[j];
                if(a[14]=='9'&&a[15]=='9'&&(a[16]>'5'&&a[16]<='9'))
                    {
                        a[6]='1';
                        a[7]='8';
                    }
                else
                    {
                        a[6]='1';
                        a[7]='9';
                    }
                    a[17]=check(a);
                    a[18]='\0';
                    printf("%s",a); 
        }
        else if(l==18)
        {
            if(a[17]==check(a))
                printf("Valid\n");
            else
                printf("Invalid\n");
        }
        else
                printf("Invalid\n");
        }
    return 0;
}


 int check(char a[])
     {
         int s=0,i;
     int wi[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
     char d[11]={'1','0','X','9','8','7','6','5','4','3','2'}; 
     for (i = 0; i < 17; ++i)
             s += (a[i]-'0')*wi[i];
         return d[s%11];
}


在进入l=15的循环结束后要输入回车才能继续下去  
想不通问题出在哪里

[此贴子已经被作者于2016-11-18 18:39编辑过]

2016-11-18 18:37
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
回复 11楼 水色苔
?????
 printf("%s\n",a); 你不会指的是l==15的输出没有换行
2016-11-18 18:55
水色苔
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-11-17
得分:0 
回复 12楼 linlulu001
不是啊  
就是例如案例里面
4
350622197904130331
11010519491231002X
110105491231002
110105491231996[回车]

110105491231002这个数据运行完了以后就停在那里了
要输入回车才能再继续下去
每次15位升18位后要输入回车
2016-11-18 19:32
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
回复 13楼 水色苔
不可能,截图发下。
2016-11-18 19:59
水色苔
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-11-17
得分:0 
回复 14楼 linlulu001

这是回车前

这是输入回车之后
2016-11-18 20:11
水色苔
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-11-17
得分:0 
回复 14楼 linlulu001
试过debug 停在这一步

按了回车才能继续下去
2016-11-18 20:18
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
gets()可以无限读取,不会判断上限,以回车结束读取。代码很显然是一次循环一次输入伴随一次输出。
所以说这情况不可能出现,也没听说那个编译器有这种情况出现。
如果不是你的问题,换编译器吧,这么奇葩的编译器不用也罢。
2016-11-18 20:42
水色苔
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-11-17
得分:0 
回复 17楼 linlulu001
额 应该是我的问题吧  oj一样过不了。。。编译器的话  只是用文本编辑器在命令行中执行的
而且你的程序能很顺利的执行  我自己的就卡在那里 郁闷

[此贴子已经被作者于2016-11-18 20:56编辑过]

2016-11-18 20:53
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
回复 18楼 水色苔
你把printf("%s",a);改成printf("%s\n",a); 应该就能过了
2016-11-18 21:08
水色苔
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-11-17
得分:0 
回复 19楼 linlulu001
不行  那样改的话输出就变成了第三行结束后直接输出一行空格 仍然要输入换行 然后继续输出最后一组数据
2016-11-18 21:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-471165-1-1.html




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

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