c/c++语言4种读入空格的方式

1.gets(s2); //这个常用的

2.scanf( "%[^\n]", s ); //注意:连用时一定要加上 getchar() 吸收换行符

3. int i=0;
     while(scanf("%c",&s1[i]),s1[i]!='\n')i++;
    s1[i]='\n';

4.

//用string库,调用getline, 直接读入一整行
    getline(cin,a);

二、C中(gets函数)

可以无限读取,以回车结束读取。 
gets()函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets()函数并不读取换行符’\n’,它会吧换行符替换成空字符’\0’,作为c语言字符串结束的标志。 
gets()函数经常和puts()函数配对使用,puts()函数用于显示字符串,并自动在字符串后面添加一个换行标志’\n’ 
但是不推荐使用因为gets(s),(s为一个字符串)。gets没有指明读取的最大字符数。这里就会出现一个潜在的问题:gets将不停的往s中储存内容,而不管是否存储的下!gets函数不会管s的可用空间有多少。如果输入的字符串过长,会导致缓冲区溢出(buffer overflow),即多余的字符超出了指定的目标空间。gets()函数就会访问未被分配的内存空间,如果这些内存未被使用,不会立即出现问题;如果这片空间已经存有数据,就会擦除掉程序中的其他数据,会导致程序中止。 
在C11标准里,gets函数已经被正式删除了。

三、C中(fgets函数)

gets与gets互为兄弟。 
fgets(char buf, int bufsize, FILE stream ):。注意第二个参数bufsize,这个参数就限制了读取的字符的个数,这就可以解决gets()函数的缺陷。我们知道fgets() 函数主要用于读取文件,如果要读取键盘,则stream参数应该为stdin。需要注意的是,如果bufsize设置为n,那么fgets()函数最多读取n-1个字符,之所以用“最多”这个词是因为,如果在之前遇到了换行符”\n”,fgets函数也会返回,读取工作将会停止,而这个”\n”也会是buf字符串中最后一个有效字符(再往后就是字符串结束符”\0”了 ),只有在一种情况下,buf不会以”\n”结尾:读到文件结束符,并且文件的最后一个不是以”\n”结尾。还有就是,fgets()函数会读取换行符(这一点和gets函数不同),当读取结束后,fgets函数会为buf在末尾添加一个空字符作为字符串的结束。 
当一个字符都没有读到时,fgets函数返回NULL。

四、C中(fgetc函数)

getc(fin),他会读取一个打开的文件fin,读取一个字符,然后返回一个int值。为什么返回的是int而不是char呢?因为如果文件结束,fgetc将返回一个特殊标记EOF,它并不是一个char。如果把fgetc(fin)的返回值强制转换为char,将无法把特殊值的EOF和普通字符区分开。如果要从标准输入读取一个字符,可以用getchar,它等价于fget(stdin)。 
使用fgetc(fin)可以从打开的文件fin中读取一个字符。一般情况下应当再检查它不是EOF后再将其转化成char值,从标准输入读取一个字符可以用getchar,他等价于fgetc(stdin)。 
fgetc和getchar将读取“下一个字符”,因此需要知道在各种情况下,“下一个字符”是哪个。如果用“scanf()”读取整数,则要是再输入后多加了一个空格,用getchar读取到的将是这个空格;如果在输入之后紧跟着换行,则读取到的是回车符“\n”。

你可能感兴趣的:(算法,c语言,算法,c++,空格)