【问题标题】:How to count the numbers of digit from a file?如何计算文件中的位数?
【发布时间】:2009-12-12 08:37:50
【问题描述】:

这是错误的。我的代码有什么问题?

#include "stdafx.h"
#include "stdlib.h"
#include "ctype.h"

int _tmain(int argc, _TCHAR* argv[])
{

FILE* input;
int num;
int numCount = 0;

    input = fopen("123.txt", "r");

    if (!input)
    {
      printf("No file \a\n");
      exit (101);
    }


    while ((fscanf(input, "%d", &num)) == 1)
        printf("%d", num);

    if (isdigit(input))
        numCount++;


    printf("number count: %d", numCount); 

    return 0;
}

【问题讨论】:

  • 您遇到了什么样的错误,编译器错误或运行时错误,或者它没有按照您想要的方式工作?这些可能会帮助您获得一些答案
  • errorC2664'isdigit' 无法从“FILE*”更改为“int”
  • 您需要考虑“isdigit”的作用。不要让参数类型 (int) 让您感到困惑。它检查 character 并在传递的参数是数字时返回非零值。您绝对不希望代码中出现 fscanf 调用。

标签: c io


【解决方案1】:

你的逻辑完全错误。您应该使用 fgetc() 读取单个字符,然后使用 isdigit() 对其进行测试。当 fgetc() 返回 EOF 时,循环应该终止。

【讨论】:

    【解决方案2】:
    while ((fscanf(input, "%d", &num)) == 1)
        printf("%d", num);
    
    if (isdigit(input))
        numCount++;
    

    您只检查一次input。你应该检查num,而不是inputFILE

    while ((fscanf(input, "%d", &num)) == 1){
        printf("%d", num);
        if (isdigit(num))
            numCount++;
    }
    

    【讨论】:

    • num 由 fscanf 中的 "%d" 设置,isdigit 正在寻找 0-9 字符的 ASCII 值。 "%d" 也应该改为 "%c",或者更好的是 fgetc
    【解决方案3】:

    isdigit() 测试一个字符,而不是一个 FILE*。

    如果你要计算一些东西,numCount++ 应该在一个循环中,而不是在整个程序中一次

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-07
      • 2017-05-28
      • 1970-01-01
      • 2016-09-05
      • 2020-09-28
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多