在c

时间:2018-02-24 11:09:38

标签: c eof

我试图在c中创建一个代码,只需用cmd命令在txt文件中写入磁盘c信息" 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测试没有被执行)。 / p>

1 个答案:

答案 0 :(得分:5)

您的代码中有三件事情发生了错误。

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

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

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