【问题标题】:Using scanf to read a file in C使用scanf读取C中的文件
【发布时间】:2014-02-05 15:37:00
【问题描述】:

我正在上第一堂关于 C 的课程,但我正在编写一个程序时遇到了一些问题。这是程序:

#include <stdio.h> //printf
#include <stdlib.h>

//Prototypes
void readScores(int* scores, int* actualCount);
void displayScores(int* scores, int* actualCount);

int main() {
int arrayCount = 100;
int scores[arrayCount];
int actualCount = 0;

readScores(scores, &actualCount);
displayScores(scores, &actualCount);
}

void readScores(int* scores, int* actualCount) {
    for(int i = 0; i <= 10; i++) {
    *actualCount = *actualCount + 1;
    scanf("%d", scores);
    }
} 

void displayScores(int* scores, int* actualCount) {
    for(int i = 1; i < *actualCount; i++) {
        printf("score %d: \t%d\n", i, *scores);
    }
}

我的目标是简单地从 score.txt 文本文件中读取分数并将它们添加到 score[] 数组中。我们在本次作业中的目标是更多地了解指针,所以不要费心试图让我的代码更“高效”或其他任何东西。

我的问题是当我编译代码时

gcc histogram.c -std=c99 -o histogram

并运行它

./histogram <scores.txt

我的输出如下所示:

score 1: 7
score 2: 7
score 3: 7
score 4: 7
score 5: 7
score 6: 7
score 7: 7
score 8: 7
score 9: 7
score 10: 7

如何修改我的代码以正确读取文本文件?这个问题一直困扰着我一整周,非常感谢您的解决方案!

谢谢!

【问题讨论】:

  • scanf 格式 "%d" 只读取一个单个值。
  • 在你的代码中你试图从 .txt 文件中读取分数?
  • "使用 scanf 读取 C 中的文件" - 不要。使用fgets()
  • @Deepika Sethi OP 的 "./histogram stdin 读取的。
  • @chux 感谢您的澄清。对linux不太了解。还在学习中。

标签: c file scanf


【解决方案1】:

由于scores是一个数组,所以可以使用多于第一个元素:

void readScores(int* scores, int* actualCount) {
    for(int i = 0; i <= 10; i++) {
    *actualCount = *actualCount + 1;
    scanf("%d", scores + i);  // Read into element i of array scores
    }
} 

void displayScores(int* scores, int* actualCount) {
    for(int i = 1; i < *actualCount; i++) {
        printf("score %d: \t%d\n", i, *(scores + i));  // Print element i of array scores
    }
}

【讨论】:

  • 对于这个实验,我们只应该在 main 中使用方括号[],否则我肯定会这样做!
【解决方案2】:

尝试增加指针的值:

void readScores(int* scores, int* actualCount) {
    for(int i = 0; i <= 10; i++) {
    *actualCount = *actualCount + 1;
    scanf("%d", scores++);
    }
} 

当然也显示:

void displayScores(int* scores, int* actualCount) {
    for(int i = 1; i < *actualCount; i++) {
        printf("score %d: \t%d\n", i, *scores++);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多