?? 31.htm
字號:
<BR>參數之間的分隔符為空格, 則參數之間必須輸入一個或多個空格。
<BR> 說明:
<BR> (1). 對于字符串數組或字符串指針變量, 由于數組名和指針變量名本身就
<BR>是地址, 因此使用scanf()函數時, 不需要在它們前面加上"&"操作符。
<BR> 例3
<BR> mian()
<BR> {
<BR> char *p, str[20];
<BR> scanf("%s",
p); /*從健盤輸入字符串*/
<BR> scanf("%s",
str);
<BR> printf("%s\n",
p); /*向屏幕輸出字符串*/
<BR> printf("%s\n",
str);
<BR> }
<P> (2). 可以在格式化字符串中的"%"各格式化規定符之間加入一個整數,
表示
<BR>任何讀操作中的最大位數。
<BR> 如例3中若規定只能輸入10字符給字符串指針p, 則第一條scanf()
函數語句
<BR>變為
<BR> scanf("%10s",
p);
<BR> 程序運行時一旦輸入字符個數大于10, p就不再繼續讀入,
而后面的一個讀
<BR>入函數即scanf("%s", str)就會從第11個字符開始讀入。
<BR> 實際使用scanf()函數時存在一個問題, 下面舉例進行說明:
<BR> 當使用多個scanf()函數連續給多個字符變量輸入時, 例如:
<BR> main()
<BR> {
<BR> char c1, c2;
<BR> scanf("%c",
&c1);
<BR> scanf("%c",
&c2);
<BR> printf("c1 is
%c, c2 is %c", c2\1, c2);
<BR> }
<P> 運行該程序, 輸入一個字符A后回車 (要完成輸入必須回車),
在執行scanf
<BR>("%c", &c1)時, 給變量c1賦值"A", 但回車符仍然留在緩沖區內, 執行輸入語句
<BR>scanf("%c", &c2)時, 變量c2輸出的是一空行, 如果輸入AB后回車, 那么輸出結
<BR>果為: c1 is A, c2 is B。
<BR> 要解決以上問題, 可以在輸入函數前加入清除函數fflush()(
這個函數的使
<BR>用方法將在本節最后講述)。修改以上程序變成:
<BR> #include<stdio.h>
<BR> main()
<BR> {
<BR> char c1, c2;
<BR> scanf("%c",
&c1);
<BR> fflush(stdin);
<BR> scanf("%c",
&c2);
<BR> printf("c1 is
%c, c2 is %c", c1, c2);
<BR> }
<P> 1.1.2 非格式化輸入輸出函數
<BR> 非格式化輸入輸出函數可以由上面講述的標準格式化輸入輸出函數代替,
但
<BR>這些函數編譯后代碼少, 相對占用內存也小, 從而提高了速度, 同時使用也比較
<BR>方便。下面分別進行介紹。
<BR> 一、puts()和gets()函數
<BR> 1. puts()函數
<BR> puts()函數用來向標準輸出設備(屏幕)寫字符串并換行,
其調用格式為:
<BR> puts(s);
<BR> 其中s為字符串變量(字符串數組名或字符串指針)。
<BR> puts()函數的作用與語printf("%s\n", s)相同。
<BR> 例4:
<BR> main()
<BR> {
<BR> char s[20],
*f;
/*定義字符串數組和指針變量*/
<BR> strcpy(s, "Hello!
Turbo C2.0"); /*字符串數組變量賦值*/
<BR> f="Thank you";
/*字符串指針變量賦值*/
<BR> puts(s);
<BR> puts(f);
<BR> }
<P> 說明:
<BR> (1). puts()函數只能輸出字符串, 不能輸出數值或進行格式變換。
<BR> (2). 可以將字符串直接寫入puts()函數中。如:
<BR> puts("Hello,
Turbo C2.0");
<P> 2. gets()函數
<BR> gets()函數用來從標準輸入設備(鍵盤)讀取字符串直到回車結束,
但回車符
<BR>不屬于這個字符串。其調用格式為:
<BR> gets(s);
<BR> 其中s為字符串變量(字符串數組名或字符串指針)。
<BR> gets(s)函數與scanf("%s", &s)相似, 但不完全相同,
使用scanf("%s", &s)
<BR>函數輸入字符串時存在一個問題, 就是如果輸入了空格會認為輸入字符串結束,
<BR>空格后的字符將作為下一個輸入項處理, 但gets() 函數將接收輸入的整個字符
<BR>串直到回車為止。
<BR> 例5
<BR> main()
<BR> {
<BR> char s[20],
*f;
<BR> printf("What's
your name?\n");
<BR> gets(s);
/*等待輸入字符串直到回車結束*/
<BR> puts(s);
/*將輸入的字符串輸出*/
<BR> puts("How old
are you?");
<BR> gets(f);
<BR> puts(f);
<BR> }
<BR> 說明:
<BR> (1). gets(s)函數中的變量s為一字符串。如果為單個字符,
編譯連接不會
<BR>有錯誤, 但運行后會出現"Null pointer asignmemt"的錯誤。
<BR>
<BR> 二、putchar()、getch()、getche()和getchar()函數
<BR> 1. putchar()函數
<BR> putchar()函數是向標準輸出設備輸出一個字符, 其調用格式為:
<BR> putchar(ch);
<BR> 其中ch為一個字符變量或常量。
<BR> putchar()函數的作用等同于printf("%c", ch);
<BR> 例6:
<BR> #include<stdio.h>
<BR> main()
<BR> {
<BR> char c:
/*定義字符變量*/
<BR> c='B';
/*給字符變量賦值*/
<BR> putchar(c);
/*輸出該字符*/
<BR> putchar('\x42');
/*輸出字母B*/
<BR> putchar(0x42);
/*直接用ASCII碼值輸出字母B*/
<BR> }
<BR> 從本例中的連續四個字符輸出函數語句可以分清字符變量的不同賦值方法。
<BR> 2. getch()、getche()和getchar()函數
<BR> (1) getch()和getche()函數
<BR> 這兩個函數都是從鍵盤上讀入一個字符。其調用格式為:
<BR> getch();
<BR> getche();
<BR> 兩者的區別是: getch()函數不將讀入的字符回顯在顯示屏幕上,
而getche()
<BR>函數卻將讀入的字符回顯到顯示屏幕上。
<BR> 例7:
<BR> #include<stdio.h>
<BR> main()
<BR> {
<BR> char c, ch;
<BR> c=getch();
/*從鍵盤上讀入一個字符不回顯送給字符變量c*/
<BR> putchar(c);
/*輸出該字符*/
<BR> ch=getche();
/*從鍵盤上帶回顯的讀入一個字符送給字符變量ch*/
<BR> putchar(ch);
<BR> }
<BR> 利用回顯和不回顯的特點, 這兩個函數經常用于交互輸入的過程中完成暫停
<BR>等功能。
<BR> 例8:
<BR> #include<stdio.h>
<BR> main()
<BR> {
<BR> char c, s[20];
<BR> printf("Name:");
<BR> gets(s);
<BR> printf("Press
any key to confinue...");
<BR> getch();
/*等待輸入任一鍵*/
<BR> }
<BR>
<BR> (2) getchar()函數
<BR> getchar()函數也是從鍵盤上讀入一個字符, 并帶回顯。
它與前面兩個函數
<BR>的區別在于: getchar()函數等待輸入直到按回車才結束, 回車前的所有輸入字
<BR>符都會逐個顯示在屏幕上。但只有第一個字符作為函數的返回值。
<BR> getchar()函數的調用格式為:
<BR> getchar();
<BR> 例9:
<BR> #include<stdio.h>
<BR> main()
<BR> {
<BR> char c;
<BR> c=getchar();
/*從鍵盤讀入字符直到回車結束*/
<BR> putchar(c);
/*顯示輸入的第一個字符*/
<BR> getch();
/*等待按任一健*/
<BR> }
<BR>
<P>
<A HREF="index.html">返回目錄</A>
<BR>
</BODY>
</HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -