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 测试)。
您的代码中有三处错误。
您重新声明了 getc
的原型。你不应该这样做,因为你的声明可能与官方标准声明不同。
getc
函数 returns 和 int
。这是因为 EOF
是一个 int
常量,其值为 -1
。和 ((unsigned char) -1) != -1
。这是因为 unsigned char
值 -1
实际上是 255
并且不等于 -1
。与 getc
(或任何类似函数) 一起使用的变量必须 是 int
.
printf
格式说明符 "%C"
(带有 upper-case C
)不是标准格式说明符。它是 Microsoft Visual C++ 扩展,适用于类型 wchar_t
的 宽字符 。由于您的变量 symb
不是与格式说明符匹配的正确类型,您将拥有 undefined behavior。对于像您这样的窄字符,您应该使用 小 大小写 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 测试)。
您的代码中有三处错误。
您重新声明了
getc
的原型。你不应该这样做,因为你的声明可能与官方标准声明不同。getc
函数 returns 和int
。这是因为EOF
是一个int
常量,其值为-1
。和((unsigned char) -1) != -1
。这是因为unsigned char
值-1
实际上是255
并且不等于-1
。与getc
(或任何类似函数) 一起使用的变量必须 是int
.printf
格式说明符"%C"
(带有 upper-caseC
)不是标准格式说明符。它是 Microsoft Visual C++ 扩展,适用于类型wchar_t
的 宽字符 。由于您的变量symb
不是与格式说明符匹配的正确类型,您将拥有 undefined behavior。对于像您这样的窄字符,您应该使用 小 大小写c
.