如何優(yōu)化C語(yǔ)言中scanf讀取數(shù)組的效率

小樊
82
2024-09-10 10:18:29

在C語(yǔ)言中,scanf函數(shù)通常用于從標(biāo)準(zhǔn)輸入(如鍵盤)讀取數(shù)據(jù)

  1. 使用freadfwrite:這兩個(gè)函數(shù)比scanfprintf更快,因?yàn)樗鼈冎苯訌奈募彌_區(qū)讀取/寫入數(shù)據(jù),而不是格式化字符串。你可以將輸入重定向到文件,然后使用fread讀取數(shù)據(jù)到數(shù)組中。
#include<stdio.h>

int main() {
    int array[100];
    FILE *file = fopen("input.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }
    fread(array, sizeof(int), 100, file);
    fclose(file);
    return 0;
}
  1. 使用getcharputchar:這些函數(shù)比scanfprintf更快,因?yàn)樗鼈冎苯訌奈募彌_區(qū)讀取/寫入字符。你可以使用getchar逐個(gè)讀取字符,然后將其轉(zhuǎn)換為整數(shù)。
#include<stdio.h>
#include <ctype.h>

int get_int() {
    int num = 0;
    char ch;
    while ((ch = getchar()) != EOF && isdigit(ch)) {
        num = num * 10 + (ch - '0');
    }
    return num;
}

int main() {
    int array[100];
    for (int i = 0; i < 100; i++) {
        array[i] = get_int();
    }
    return 0;
}
  1. 使用scanf的批量讀取功能:scanf可以一次讀取多個(gè)值,只需在格式字符串中指定足夠的空間。這樣可以減少函數(shù)調(diào)用次數(shù),從而提高效率。
#include<stdio.h>

int main() {
    int array[100];
    for (int i = 0; i < 100; i += 10) {
        scanf("%d %d %d %d %d %d %d %d %d %d", &array[i], &array[i+1], &array[i+2], &array[i+3], &array[i+4], &array[i+5], &array[i+6], &array[i+7], &array[i+8], &array[i+9]);
    }
    return 0;
}

請(qǐng)注意,這些方法可能需要根據(jù)你的具體需求進(jìn)行調(diào)整。在選擇最佳方法時(shí),請(qǐng)考慮輸入數(shù)據(jù)的格式、數(shù)組大小以及程序的其他部分。

0