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