【C 語言入門】192-193.輸入不定個數字串的練習和優化

在這篇文章,我們來做輸入不定個數字串的練習。

架設我們需要寫一個程式,讓使用者輸入多個字串後,印出使用者輸入的字串。

當使用者輸入 END 表示結束。

#include <stdio.h>

int main()
{
    char input[5];
    scanf("%s", input);

    return 0;
}

首先我們準備一個字元陣列,然後通過 s 把這個字串讀到字元陣列裡面。

字元陣列的名字本身是指向第一個元素的指標,因此 scanf 的 input 就不需要額外加取址符 & 了。

如果一開始初始化的 input 的大小太小,塞不下的話就會產生溢位,是很危險的操作。

這裡我們把大小設成 5 來做一個變化。

#include <stdio.h>
#include <string.h>

int main()
{
    char input[5];
    while(1){
        scanf("%s",input);
        if(strcmp(input, "END") == 0) break;
    }
    scanf("%s", input);

    return 0;
}

在程式中,我們是一一讀取 input 字串,當讀取到 “END” 這個字串的時候,while 迴圈就結束。

讀進來之後我們需要存起來,因此需要準備一個存字串的陣列 str。

#include <stdio.h>
#include <string.h>

int main()
{
    char str[100][5];
    char input[5];
    int len = 0;
    while(1){
        scanf("%s",input);
        if(strcmp(input, "END") == 0) break;
        ++len;
    }

    return 0;
}

len 是目前使用者輸入的字串數量。

一開始設為 0,每次讀完一個字串,只要不是結尾 “END” 字串,都會把 len 加上 1。

那我們只要確保 len 的大小大於等於 len 的長度就可以了。

#include <stdio.h>
#include <string.h>

int main()
{
    char str[100][5];
    char input[5];
    int len = 0;
    while(1){
        scanf("%s",input);
        if(strcmp(input, "END") == 0) break;
        strcpy(str[len],input);
        ++len;
    }
    return 0;
}

第一次執行 input 會存 0,第二次會存 1,以此類推。

不過這個程式有個問題,就是我們可以輸入幾個字串,每個字串有多長,都是固定的。

如果超過了可能會發生溢位。

Leave a Comment

Your email address will not be published. Required fields are marked *