不像C++中使用 iostream 庫,在C語言中,通過函數的形式進行輸入和輸出。C語言中最普遍的輸入函數是 scanf,輸出函數是 printf。
我們通過下面兩個示例程序來比較一下C++和C的輸入輸出的區別。
C++輸入輸出示例:
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
C輸入輸出示例:
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", a+b);
return 0;
}
這兩個程序的功能是一樣的,都是:輸入 \(a\) 和 \(b\),輸出 \(a+b\)。
scanf(scan function,scan 是“掃描”的意思,f 是 function(“函數”)的首字母)用於輸入,它的第一個參數是一個字符串,後面的參數都是要輸入變量的地址。
%d:% 是 “佔位符”,它表示這裏要輸入一個變量,d 是“十進制(decimal)” 的首字母。所以 %d 表示的是 “我這個位置要輸入一個十進制整數”,即一個 int 類型的數。
不同的數據類型對應的 % 後面跟的字符不盡相同,常用的如下:
- int:d
- long:ld
- long long:lld
- float:f
- double:lf
- char:c
- 字符數組:s
scanf的第二個參數開始就是要輸入變量的地址,我們用 &a 表示變量 a 的地址,&b 表示變量 b 的地址。
printf(print function,print 是“打印”的意思,f 是 function 的首字母),用於輸入,它的的第一個參數是一個字符串,後面的參數都是要輸入的變量。
字符輸入函數
getchar()
函數從命令行讀取一個字符並返回,putchar(c)
函數用於輸出一個字符 c。示例如下:
#include <stdio.h>
int main()
{
char c = getchar();
putchar(c);
return 0;
}
這個程序輸入一個字符,並輸出。
我們可以使用 getchar 函數實現輸入一行,並輸出一行的功能:
#include <stdio.h>
int main()
{
char c;
while ((c = getchar()) != '\n') putchar(c);
return 0;
}
字符串整行輸入
對於一個字符數組 s 來說
下面兩種方式都無法讀取字符串中的空格:
cin >> s;
或者
scanf("%s", s);
這兩句話都是碰到空格或回車就讀取中斷了。
C語言中使用 gets 函數讀取一整行(包括空格),用法如下:
#include <stdio.h>
int main()
{
char s[1001];
gets(s);
puts(s);
return 0;
}
這裏的 puts 函數用於輸出字符數組 s(輸出部分仍然可以用 pintf 或者 C++的 cout)。puts 函數會多輸出一個換行符。
如果使用 iostream 庫,則可以使用 cin.getline 函數,它會讀取一整行字符串(包括空格),示例如下:
#include <iostream>
using namespace std;
int main()
{
char s[1001];
cin.getline(s, 1000);
cout << s << endl;
return 0;
}
其中 cin.getline 函數的子一個參數爲字符數組,第二個參數爲最多接收的字符數。