信息學競賽中C語言的輸入輸出

不像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 函數的子一個參數爲字符數組,第二個參數爲最多接收的字符數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章