PAT B1031 查验身份证 学会断点调试! 字符串输入两个结果一样!循环自增看清楚要在哪里申明
2015-02-23 22:43
453 查看
//这题让我认识到断点调试的极大好处!!!棒极了! //这一题调试了很久,后来改了gets为scanf("%s",str)才成功,用gets()时我也去除了换行符啊!目前仍然不知道怎么回事! //我靠,后来换成gets和getchar()在oj上又全部通过了!看来可能之前是别的原因造成的 //无论如何,下次用断点调试!加油! #include<stdio.h> #include<string.h> //#define LOCAL int rate[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char change[11]={'1','0','X','9','8','7','6','5','4','3','2'}; int main(){ #ifdef LOCAL freopen("B1031data.in","r",stdin); freopen("B1031data.out","w",stdout); #endif //这种题可以边读入边输出,因此不需要二维数组 //关于验证是否是数字,可能要用是否在‘0’~‘9’之间了 //从0开始存放到str中 int n=0,count=0,last=0,i;//n<=100 int number; bool flag=true; char str[20];//这个确实是字符型数组啊 scanf("%d",&n); number=n; //getchar();//这一句很重要,不然就会吞掉一行数据 while(n--){ last=0; //gets(str); scanf("%s",str); flag=true; for(i=0;i<17;i++){//注意变量的局部性还是应该全局性。自增的不要总是放在循环中申明,看清外面要不要用到再确定在哪里申明 if(!(str[i]>='0'&&str[i]<='9')) break; last+=(str[i]-'0')*rate[i];//一开始以为这里要除以100,结果发现并不要除 } if(i<17){//应该=17才是对的 flag=false; puts(str); } else{ //如果前面的正确,再来验证最后一位 if(str[17]!=change[last%11]) { flag=false; puts(str); } } if(flag==true){ count++; } /*else{ puts(str);//默认输出后换行 }*/ } if(count==number){ printf("All passed\n"); } return 0; }
相关文章推荐
- 编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户非数字的输入之前程序循环处理输入值。
- 将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:
- 截取字符串。输入字符串和按照多大字节进行截取,输出结果:按照字节截取的字符串。注意:汉字占两个字节,所以输入的汉字不能截取为半个汉字!!!例子:输入“我ABC爱北京”,字节输入6,结果为:“我ABC”
- 编写两个函数,分别求由键盘输入两个整数的最大公约数和最小公倍数。用主函数调用这两个函数,并输出结果
- 编程两个小问题,C语言中如何读取一行字符串的问题和VS2008中调试出错一个问题
- Visual Studio 调试小技巧(1)- 根据字符串内容添加断点
- Visual Studio 调试小技巧(1)-根据字符串内容添加断点
- Algorithm backup ---- Compare occurences of each character of two strings(比较两个字符串每个字符出现频率是否一样)
- Visual Studio 调试小技巧(1)-根据字符串内容添加断点
- 函数: 判断两个字符串是否完全一样
- JS 判断输入字符串的长度(中文占用两个字节,英文占用一个字节)
- 给定两个字符串s1,s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。
- 从键盘输入两个字符串,不用字符串函数strcmp()比较两者的大小
- Visual Studio 调试小技巧(1)-根据字符串内容添加断点
- 编写代码,由用户输入一个字符串,使用foreach循环遍历出此字符串中有多个字母,多少个数字,多少个标点
- 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
- 调试多线程更方便的两个特性(让断点只在特定线程触发、同时查看所有线程的堆栈信息)
- 续上一篇文章,用栈来实现:按照用户输入的rule,经过并、交、差运算后,输出字符串结果。
- 练习2-8:创建一个vector,并用一个for循环语句向它输入25个浮点数,显示vector的结果。
- 如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)