在路上
分类: C/C++
2012-09-10 21:45:24
1.最容易的,将一个字符串分为一个一个字符输入 char s[100]; int i=0; while(scanf("%c",&s[i]),s[i]!='/n')i++; s[i]='/0'; //遇到换行停止输入,并且将换行替换为/0 printf("%s/n",s); 但是如果在这段程序前还有其他类型的输入,则需要把回车吃掉,即加一条scanf("%*c"),因为scanf不会将/n或者空格符赋值给字符串,但会赋值给字符输入"%c". 如: int x; scanf("%d",&x); printf("%d/n",x); scanf("%*c"); //用来吃掉输入x时的分隔符号,可以是/n,或者空格之类的; while(scanf("%c",&s[i]),s[i]!='/n')i++; s[i]='/0'; printf("%s/n",s); ps: getch()是从键盘接收 getchar()是从缓冲区读取,也都可以实现这个类似功能。关于键盘上的回车键,可能大家都知道,按下回车键,在Window下产生两个字符,是/r/n(回车+换行),程序输入文本时遇到"/r/n"转换为/n,输出是将/n转为/r/n(二进制方式下不存在这种方式),这是Window系统的特立独行吧。这与mac和Unix都不相同,不详细说了。
2.char *gets( char *buffer ) 比较简单,gets读取一行,遇到/n结束,它会把/n一并读取,并将/n替换为/0。(/n不会留在缓冲区) char s[100]; gets(s); 如果输入abc def回车,则s中的值为abc def/0 关于程序前面的输入遗留的分隔符和第一种方法一样; 3.fgets(char * s,int size,FILE * stream) 和gets差不多,fgets会读取行尾的/n,然后再添加/0,(/n不会留在缓冲区) char s[100]; fgets(s,40,stdin); 如果输入abc def回车,则s中的值为abc def/n/0 4.scanf("%[^/n]",s) 使用scanf正则表达式,直到遇到/n停止输入,/n不会进入s,会留在缓冲区,需要吃掉,可以scanf("%[^/n]%*c",s)或者getchar()吃掉,这里/n可以换成其他字符。 当然用c++的话有getline,get等 cin.getline会将缓冲区的/n抛弃,cin.get不会(结束符会留在缓冲区)。其实那都是在默认结束符号为/n时,当结束符设置为'a',则抛弃a,如果a之后的字符仍在缓冲区中。 总结:输入放入缓冲区,函数再从缓冲区读取,每个函数都有不同的处理方式,于是乎就让人纠结起来,我也没讲全,但针对空格是基本够用了。其他高级语言的话处理起来好多了,用c还是有一点点纠结,不过这也是自由吧。也许有疏漏或不对的地方,见谅。