EOF 块 while 在 c 中循环

EOF block while loop in c

我正在尝试用 c 编写一个代码,它只需使用 cmd 命令将磁盘 c 信息写入 txt 文件 "Wmic logicaldisk get" 但我只需要数字(大小 4294931)。 所以我选择了这个输出并将其放入一个 txt 文件中以仅获取输入中的数字。(我知道这很奇怪)。

这是完整代码:

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <ctype.h>

int main()
{
    system("wmic logicaldisk get size> test.txt");

    unsigned char symb;
    FILE *FileIn;
    FileIn = fopen("test.txt","rt"); 
    int getc(FILE *stream);
    while (( symb = getc(FileIn)) !=EOF) 
    {
        if( isdigit(symb))
        {
            printf("%C", symb);
        }
    }
    printf("test"); //for debug
}

代码有效但无法退出循环,同时它正确打印了数字但未执行下一个命令(因此未执行 pritnf 测试)。

您的代码中有三处错误。

  1. 您重新声明了 getc 的原型。你不应该这样做,因为你的声明可能与官方标准声明不同。

  2. getc 函数 returns 和 int。这是因为 EOF 是一个 int 常量,其值为 -1。和 ((unsigned char) -1) != -1。这是因为 unsigned char-1 实际上是 255 并且不等于 -1。与 getc(或任何类似函数) 一起使用的变量必须int.

  3. printf 格式说明符 "%C"(带有 upper-case C)不是标准格式说明符。它是 Microsoft Visual C++ 扩展,适用于类型 wchar_t 宽字符 。由于您的变量 symb 不是与格式说明符匹配的正确类型,您将拥有 undefined behavior。对于像您这样的窄字符,您应该使用 大小写 c.