本文摘錄自編程中國
非格式化輸入輸出函數可以由上面講述的標準格式化輸入輸出函數代替, 但這些函數編譯後代碼少, 相對佔用內存也小, 從而提高了速度, 同時使用也比較方便。下面分別進行介紹。
1. puts()和gets()函數
1.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");
1.2 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"的錯誤。
2. putchar()、getch()、getche()和getchar()函數
2.1 putchar()函數
putchar(ch);
其中ch爲一個字符變量或常量。
putchar()函數的作用等同於printf("%c", ch);
例6:
#include<stdio.h>
main()
{
char c: /*定義字符變量*/
c='B'; /*給字符變量賦值*/
putchar(c); /*輸出該字符*/
putchar('\x42'); /*輸出字母B*/
putchar(0x42); /*直接用ASCII碼值輸出字母B*/
}
從本例中的連續四個字符輸出函數語句可以分清字符變量的不同賦值方法。
2.2 getch()、getche()和getchar()函數
2.2.1 getch()和getche()函數
getch();
getche();
兩者的區別是: getch()函數不將讀入的字符回顯在顯示屏幕上, 而getche()函數卻將讀入的字符回顯到顯示屏幕上。
例7:
#include<stdio.h>
main()
{
char c, ch;
c=getch(); /*從鍵盤上讀入一個字符不回顯送給字符變量c*/
putchar(c); /*輸出該字符*/
ch=getche(); /*從鍵盤上帶回顯的讀入一個字符送給字符變量ch*/
putchar(ch);
}
利用回顯和不回顯的特點, 這兩個函數經常用於交互輸入的過程中完成暫停等功能。 例8:
#include<stdio.h>
main()
{
char c, s[20];
printf("Name:");
gets(s);
printf("Press any key to confinue...");
getch(); /*等待輸入任一鍵*/
}
2.2.2 getchar()函數
getchar()函數的調用格式爲:
getchar();
例9:
#include<stdio.h>
main()
{
char c;
c=getchar(); /*從鍵盤讀入字符直到回車結束*/
putchar(c); /*顯示輸入的第一個字符*/
getch(); /*等待按任一健*/
}