#include<stdio.h> /*void main(){ int i; char s[81],*p=s; printf("输入一个以回车键结束的字符串(字符数少于80):"); gets(s); for(i=0;s[i]!='\0';i++) { if(s[i]<=57&&s[i]>=48||s[i]>=97&&s[i]<=102) { *p=s[i]; p++; } } *p='\0'; puts(s);}*/void main(){ int i; char s[81],*p=s; printf("输入一个以回车键结束的字符串(字符数少于80):"); gets(s); for(i=0;i<81;i++) { if(s[i]<=57&&s[i]>=48||s[i]>=97&&s[i]<=102) { *p=s[i]; p++; } } *p='\0'; puts(s);}这里两个主函数作用是剔除输入的字符串中(非十六进制数字字符,即0 1 2 3 4 5 6 7 8 9 a b c d e f)运行结果不同,这是为什么?(被我注释掉的结果是第一张图)还有个问题:两个程序在运行时都要按两次回车键才结束,不应该是一次吗?
这两个程序区别在于i循环的结束条件,前一个是遇到输入字符串的末尾就结束,后一个要处理整个数组所有数据才结束,即使不属于输入的字符串也处理,恰巧在不属于字符串内容的位置有一个字符0存在也被添加到了结果字符串中了。
按照程序,不应当要换行两次才完成输入。
追问就是搞不懂0是哪来的……头要秃了