scanf能不能與gets一起用

gets函數可以一次接收一行輸入串,其中可以有空格,也就是說空格可以做爲字符串的一部分輸入. 
而scanf函數接收的字符串不會含有空格,即遇到字空格時,認爲字符串輸入結束,也就是說空格是scanf默認的結束符號。 
scanf和gets不能混合使用,如果一個程序中用scanf的話,一般不能再用gets,反之亦然。

       當在scanf()後面使用gets()時,程序直接逃過gets()函數直接跳過的原因是,在結束前一個scanf輸入時輸入的回車被後一個gets輸入時接受,也就是說前一個地方輸入的“數據+回車”分別被兩個地方接受。gets()遇到前面scanf()輸入的回車時停止接收,gets()中的輸入緩衝區沒有數據。sanf()和gets()先後一起使用時會給造成一種似乎gets()沒有被執行的假象。

下面程序就是錯誤使用sanf和gets。

#include "string.h";
#include "stdio.h"

int main(int argc, char* argv[])
{
	char buffer[10];
	char test;
	scanf("%c", &test);	
	printf("輸入c完畢,開始輸入buffer\n");
    gets(buffer);
	printf("輸入buffer完畢\n");
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章