上一章
利用上一章學到的東西,我們已經有能力可以在螢幕上顯示任何文字了!
但是,這樣的程式還無法和人互動
我們的程式要怎麼和人互動呢?
方法是人輸入一些文字然後按下鍵盤上的Enter鍵,把這些文字輸入給程式
然後程式就可以依照輸入的東西來作出對應的回應了 (這裡的「回應」指的是在螢幕上顯示東西)
這裡先來向大家解釋甚麼是「輸入 (Input)」和「輸出 (Output)」
它們可以當動詞也可以當名詞,在以後的文章看到時,可能需要自行判斷一下
當動詞時,「輸入」代表將一段文字傳給程式,「輸出」代表程式將一段文字顯示在螢幕上
當名詞時,「輸入」代表傳給程式的一段文字,「輸出」代表程式在螢幕上顯示的一段文字
懂了嗎?^_^
(p.s.其實輸入輸出的意義不僅僅是這樣,但在以後的教學中,它們就只會是這個意思)
不過,要做到「程式依照輸入的東西來作出對應的回應」,就代表
你的程式必須記住你輸入了甚麼東西
我們要怎麼實現讓程式擁有記憶呢?
方法就是把資訊以「變數 (Variable)」的形式儲存起來
變數要怎麼使用呢?
在C++裡面,變數有很多種類型,我們稱作「型別 (Type)」
有哪些型別呢?
我想想喔,有short、int、long long、bool、char、float、double、......,甚至在新版的C++ (C++11) 又新增了一些型別
不過,大部分都不會用到 (或很少用到)
事實上,你只要學好int、char、float這三種型別,就足夠應付所有功能了!
其他的型別就只是int、char、float這三種型別的「功能增強版」或「功能削弱版」(?)
「int」是「整數 (Integer)」,這種型別的變數是用來儲存「一個整數」的
「char」是「字元 (Charactor)」,這種型別的變數是用來儲存「一個字」的
「float」是「浮點數 (Floating-point number)」,別被它的名字嚇到,其實「float」做的事情就和「int」一樣,只是「float」可以允許「小數」的存在,缺點是你必須接受些微的計算誤差。現階段,這個誤差你可以不用考慮它
介紹完了,那要怎麼使用呢?
來看個範例
我們希望輸入一個整數,然後程式就會輸出一個跟你輸入的數值相同的整數 (例如:輸入「12」或「012」,會得到輸出「12」)
也就是『輸入一個「int」,輸出一個「int」』
程式碼在這裡:
#include<cstdio> int main() { int a; scanf("%d",&a); printf("Your input is %d, I remember it!\n",a); return 0; }像上一章一樣,在「Dev-C++」裡面照著打出跟上面一樣的程式碼,然後按下鍵盤上的「F11鍵」,就可以玩玩看了!
這裡我們看到了一個陌生的名字:scanf
還記得printf嗎?或許你沒有印象,但事實上,在上一章我們已經偷偷地使用了
「printf」是用來「輸出」的,而這裡看到的新朋友「scanf」,是用來「輸入」的
可以發現,scanf之後的兩個小括號包起來的部分,和printf一樣,都有兩個「"」框起來的東西
事實上,因為都是對文字作處理,之後你會慢慢發現,其實「scanf」和「printf」是很像的東西
那麼,「%d」是甚麼呢?
上一章有隱約的表示,「\」是一種特殊符號,當程式碼中 (僅限兩個「"」框起來的地方) 出現「\」這個符號時,電腦會把「\」和下一個字合在一起,代表某種具有特殊意義的......東西 (?)
同樣的,「%」也是一種特殊符號 (同樣僅限兩個「"」框起來的地方),電腦在閱讀 (還記得上一章我們把程式碼比喻為文章嗎?) 到「%」這個符號時,也會自動把「%」和下一個字 (有時候是兩個或多個) 合在一起,代表某種「變數」顯示在螢幕上的樣子
在這裡,我來向大家介紹,對於每一種型別的變數,對應到「%」後面接甚麼東西 (亂接的話電腦會看不懂喔XD)
「int」 對應到「%d」
「char」 對應到「%c」
「float」 對應到「%f」
剩下的型別,我也一一介紹,要看不看隨便你
「long long」對應到「%lld」
「double」 對應到「%lf」(輸入用「%lf」,但輸出要用「%f」)
「char*」 對應到「%s」(以後會提到)
試著實現char版本和float版本的程式看看吧~
輸入一個char,輸出一個char:
#include<cstdio> int main() { char a; scanf("%c",&a); printf("Your input is %c, I remember it!\n",a); return 0; }
輸入一個float,輸出一個float:
#include<cstdio> int main() { float a; scanf("%f",&a); printf("Your input is %f, I remember it!\n",a); return 0; }
另外,你甚至可以「輸入三個int,輸出三個int」喔!
程式碼:
#include<cstdio> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("Your inputs are %d, %d, and %d, I remember them!\n",a,b,c); return 0; }試著亂調a、b、c這三個變數在程式碼中的順序,看看會發生甚麼事吧!(有三個位置,任君亂調(?) )
你還能修改出其他東西嗎?
把任意幾行程式碼複製一遍或多遍,你的程式會變成怎麼樣的行為呢?
把任意兩行或多行程式碼交換,會有甚麼差別嗎?
「%」後面如果接其他的東西,會有甚麼神奇的事發生呢?(咦?XD)
下一章
感謝:李旺陽學長
(版權所有 All copyright reserved)
想請問一下
回覆刪除我寫了以下這段
為何輸出會是
-5
-5 1
而不是只有
-5 1
呢??
#include <iostream>
using namespace std;
int foo(int a){
cout << a << '\n';
a = 1;
return a;
}
int main(){
int a = -5, b;
b = foo(a);
cout << a << ' ' << b << endl;
}
您的foo函式也有cout一行呀XDD
刪除可是不是只執行main裡面的程式嗎?
刪除不是只會cout a << ' ' << b 嗎?
哈哈,您可能搞錯囉
刪除使用函式會讓函式裡面的程式碼被執行哦~
另外,本系列教學還有一章叫做函式,歡迎參考看看~
想請問一下
回覆刪除我想找三個數的最大值
寫了以下程式碼
應該是對的
但想問一下
為何不用比num2跟num3大小呢
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int num1, num2, num3;
cout << "Enter three interger";
int max;
cin >> num1 >> num2 >> num3;
max = num1;
if (num2 > num1)
max = num2;
if (num3 > num1)
max = num3;
cout << "max is " << max <<endl;
}
我有一個留言好像被刪掉了QQ
回覆刪除別擔心~小莫幫您還原回來了~~XD
刪除其實您的程式碼是有些小問題的哦~
試試看num1=1, num2=3, num3=2
正確答案應該是3(?)
啊我知道了
刪除改成
if (num2 > max)
max = num2;
if (num3 > max)
max = num3;
對吧?
是的沒錯 ^_^
刪除您好:
回覆刪除程式碼如下:
#include
int main()
{
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
printf("Your input are %f, %f, and %f, I remember them!\n",a,b,c);
int d,e,f;
scanf("%d%d%d",&d,&e,&f);
printf("Your input are %d, %d, and %d, I remember them!\n",d,e,f);
char g,h,i;
scanf("%c%c%c",&g,&h,&i);
printf("Your input are %c, %c, and %c, I remember them!\n",g,h,i);
return 0;
}
為何在輸入第三個指令(char)時,輸入abc,只有顯示Your input are, a, and b, I remember them!而不是Your input are a, b, and c, I remember them! (輸入的c無輸出在畫面上)
謝謝
你可能把輸入g時是輸入換行字元
刪除#include
回覆刪除int main()
{
int a;
scanf("%d",&a)
printf("Your input is %d, I remember it!\n",a);
return 0;
}
it shows up error but i cant find why it is wrong
can you help me?thanks!
Watch out! You lacked a ';' on the end of 5th line. ;)
刪除#include<cstdio>
回覆刪除int main()
{
int a;
scanf("%d",&a)
printf("Your input is %d, I remember it!\n",a);
return 0;
}
Watch out! You lacked a ';' on the end of the 5th line. ;)
刪除#include
回覆刪除int main()
{
int a;
scanf("%d",&a);
printf("Your input is %d, I remember it!\n",a);
return 0;
}
i can not find who i wrong, it can not show any think
In this example, be sure to enter a number such as 5.
刪除The output should be "Your input is 5, I remember it!\n"
Feel free to ask any further questions! ^_^
#include
刪除int main()
{
int a;
scanf("%d",&a);
printf("Your input is %d, I remember it!\n",a);
return 0;
}
請問這支程式 我自己打會跳error 用複製貼上也是error 是哪裡有問題
#include
回覆刪除int main()
{
int a,b,c;
scanf("%11%12%13",&a,&b,&c);
printf("Your inputs are %11, %12, and %13, I remember them!\n",a,b,c);
return 0;
}
請問一下我是不是哪裡寫錯為什麼我跑不出東西,謝謝
%後不能亂加吧 照格式來
刪除%11、%12、%13都改成%d就OK囉!有後續也都歡迎提問~ ^_^
刪除#include
回覆刪除int main()
{
int a;
scanf("%d",&a);
printf("Your input is %d, I remember it!\n",a);
return 0;
}
想知道為什麼照著複製這段程式碼後,在輸入數字時
偶爾可以run出正確數字,偶爾卻不行?
難道說這段程式碼當中有什麼限制嗎?
比方說不能打3位數數字或是只能輸入幾位數數字之類的?
能不能提供無法run出正確數字的截圖呢><
刪除三位數應該是沒問題的哦!只要不要超過2147483647或低於-2147483648就好~
#include
回覆刪除int main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("Your inputs are %d, %d, and %d, I remember them!\n",a,b,c);
return 0;
}
i use this program and type some number(eg.1010),but it shows1,1,0...why?
Your input contains no ",". Therefore, it should be:
刪除scanf("%d%d%d",&a,&b,&c);
or
scanf("%d %d %d",&a,&b,&c);
(whitespaces do not matter)
Welcome to ask more as long as you wish! ^_^
問一下 iostream 和 cstdio 的語法有哪些地方不同
回覆刪除一個用cout,cin;另一個是用printf scanf
刪除差不多XD
刪除就是看起來和寫起來可能不太一樣,小莫我自己是比較熟printf/scanf,cout/cin您可以另請高就(?)
能否告訴我現在已經用到了店數的int,為何上面的 int main() 還要留著?,我是初學者很多都不懂,謝謝
回覆刪除店數->變數?
刪除恩,就是C++規定要這樣寫XD(「int main()」的部分)
或許真有它的道理只是小莫還沒去研究(?!)
輸入100000000000000000000要用哪個資料型別
回覆刪除這麼大的數字要自行實作大數哦
刪除可以先當作string讀進來再把每個位數切開來分別進行處理,會比較複雜但這是可行的