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还是有一点点纠结,不过这也是自由吧。也许有疏漏或不对的地方,见谅。