目標:
- 學會進階的輸入輸出
- 學會暫存器的清除
我在Chapter 04中有了最後幾點-更上一層,我覺得這會使內容太多,且不易吸收。我是曾打算把Chapter 04拆成兩節,但我這份筆記是為了方便入門,因此拆分成兩份就過於零碎。這份就做為延伸補充,對於入門者是值得參考的喔。
一、字串得輸入/輸出
- 輸出:
在前面已經用printf("%s",name);來輸出姓名字串,在這裡介紹一個專門輸出字串的函數,就是puts().
語法:puts(字串陣列名稱); 或 puts(字串陣列名稱);
- 輸入:
在前面已經用scanf了,但scanf有一個問題,就是字串中不能有空白鍵,因此,我們可以改用專門輸入字串的函數gets()或fgets()。
語法:gets(字串陣列名稱); 或 fgets(字串陣列名稱);
不知道各位好不好奇,既然有方式可以取代printf/scanf來輸出/入字串,那非字串形不行?答案是不行。
二、字元得輸入/輸出
- 輸出:
在前面已經用printf("%c",word);來輸出姓名字串,在這裡介紹一個專門輸出字串的函數,就是putchar()。
語法:putchar(字串陣列名稱);
- 輸入:
在前面已經用scanf了,但scanf有一個問題,就是字串中不能有空白鍵,因此,我們可以改用專門輸入字串的函數getchar()。
語法:getchar(字串陣列名稱);
特別的,第一、二點若前面有用到scanf()時,scanf()要加\n,因為gets、getchar會直接擷取輸入的內容,因此會產生錯誤。
三、字串
因為C無法直接處理字串,因此要用陣列來處理,其結束時結尾會有'\0'。後面會在做介紹,因為這裡有用到字串,因此先大概說明一下。
四、補零
整數前面補0:前面學過如何讓每個位數保持固定的顯示寬度,這裡要學的是如何在前面補零。
語法:%0Nd,其中N為正整數。e.g.%02d 就是位數不足兩位時,前面補零。
要注意的是,不可以和+-號連用,否則無效
五、溢位問題
資料型態中,都會有一個固定的記憶體大小,若超出了會怎樣?其實,電腦會以取餘數的方式處理。舉例來說,有一個資料型態的十進位數值範圍為-1~1,若輸入為2,則會輸出-1。這點務必記得!
六、遞增遞減
遞增運算、遞減運算。在C中遞增以“++”表示,遞減以“--”表示。一對++(或一對--)表+1(或-1)。其中,又可以分為前置型和後置型。
(1)前置型:七、執行控制(Windows 專有)
語法:++變數名稱; 或 --變數名稱
範例:
int a=20,b;b=++a;
printf("a=%d b=%d",a,b);
輸出:a=11,b=11
意義:先把變數a加一,再把b等於a。
(2)後置型
語法:變數名稱++; 或 變數名稱--;
範例:
int a=10,b;
b=a--;
printf("a=%d b=%d",a,b);
輸出:a=9,b=10。意義:先讓b等於a,再把a減一。
把程式打包後,視窗(以目前學到的,基本上是命令提示字元)會迅速消失。可以加上system("pause");讓視窗暫停,就不會閃退了。但有一點要注意的,windows系統可以成功編譯並執行,但非windows系統是無法成功執行喔!同樣的system("clear")、system("cls")是同樣的道理。八、暫存器的處理
在使用輸入字元時,若前一行有按下Enter鍵之類的,會無法輸入字串,這是因為WIndows在按下Enter鍵後會回傳CL(Enter)鍵和LF(換行),導致被誤植入字元變數中。因此只要再輸入字元的程式前一行加上fflush(stdin);即可。
- 未加入:
#include<stdio.h> int main(){ int n; char word; printf("Please enter the number "); scanf("%d",&n); printf("The number is %d",n); printf("Please enter one word "); scanf("%c",&word); printf("The ASCII code is %d ",word); system("pause"); return 0; }
無法輸入字串
- 已加入:
#include<stdio.h> int main(){ int n; char word; printf("Please enter the number "); scanf("%d",&n); printf("The number is %d",n); fflush(stdin); printf("Please enter one word "); scanf("%c",&word); printf("The ASCII code is %d ",word); system("pause"); return 0; }
這樣就可以輸入字元了
九、綜合練習
1.若執行程式時,命令提示字元閃退,可能要加上什麼?
2.請讓使用者輸入一個句子(有空格喔),輸出使用者輸入的句子。
3.請讓使用者輸入一個數字,按下enter鍵後輸入一個字串。輸出某數的立方,和字串。
輸入:
10
ABC
輸出:
1000
ABC
答:#include<stdio.h> int main() { int n; char sentence[10000];/*可輸入9999個字母(含空格)。注意,中文字可能會亂碼*/ scanf("%d\n",&n);/*記得加\n*/ gets(sentence); printf("%d\n%s",n*n*n,sentence); return 0; }
4.試說明前置型和後置型遞增遞減符號的差異。
5.請讓使用者輸入字元,並且以十進位輸出ASCII碼。#include<stdio.h>
int main() { char words; words=getchar(); printf("%d",words); return 0; }
沒有留言:
張貼留言