1.1.2 非格式化輸入輸出函數
非格式化輸入輸出函數可以由上面講述的標准格式化輸入輸出函數代替,但這些函數編譯後代碼少,相對占用內存也小,從而提高了速度,同時使用也比較方便。下面分別進行介紹。
一、puts()和gets()函數
1. puts()函數
puts()函數用來向標准輸出設備(屏幕)寫字符串並換行,其調用格式為:
puts(s);
其中s為字符串變量(字符串數組名或字符串指針)。
puts()函數的作用與語printf("%s\n", s)相同。
例4:
main()
{
char s[20], *f; /*定義字符串數組和指針變量*/
strcpy(s, "Hello! Turbo C2.0"); /*字符串數組變量賦值*/
f="Thank you"; /*字符串指針變量賦值*/
puts(s);
puts(f);
}
說明:
(1). puts()函數只能輸出字符串, 不能輸出數值或進行格式變換。
(2). 可以將字符串直接寫入puts()函數中。如:puts("Hello, Turbo C2.0");
2. gets()函數
gets()函數用來從標准輸入設備(鍵盤)讀取字符串直到回車結束,但回車符不屬於這個字符串。其調用格式為:
gets(s);
其中s為字符串變量(字符串數組名或字符串指針)。
gets(s)函數與scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)函數輸入字符串時存在一個問題,就是如果輸入了空格會認為輸入字符串結束,空格後的字符將作為下一個輸入項處理,但gets() 函數將接收輸入的整個字符串直到回車為止。
例5
main()
{
char s[20], *f;
printf("What's your name?\n");
gets(s); /*等待輸入字符串直到回車結束*/
puts(s); /*將輸入的字符串輸出*/
puts("How old are you?");
gets(f);
puts(f);
}
說明:
(1). gets(s)函數中的變量s為一字符串。如果為單個字符,編譯連接不會有錯誤,但運行後會出現"Null pointer asignmemt"的錯誤。