C语言定义字符串数组两个问题

#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)运行结果不同,这是为什么?(被我注释掉的结果是第一张图)还有个问题:两个程序在运行时都要按两次回车键才结束,不应该是一次吗?

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);
}

这两个程序区别在于i循环的结束条件,前一个是遇到输入字符串的末尾就结束,后一个要处理整个数组所有数据才结束,即使不属于输入的字符串也处理,恰巧在不属于字符串内容的位置有一个字符0存在也被添加到了结果字符串中了。

按照程序,不应当要换行两次才完成输入。

追问

就是搞不懂0是哪来的……头要秃了

温馨提示:答案为网友推荐,仅供参考
相似回答