我试图在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>
答案 0 :(得分:5)
您的代码中有三件事情发生了错误。
您重新声明getc
的原型。您不应该这样做,因为您的声明可能与官方标准声明不同。
getc
函数返回int
。这是因为EOF
是int
常量,值为-1
。并((unsigned char) -1) != -1
。这是因为unsigned char
值-1
实际上是255
,并且不等于-1
。与getc
(或任何类似函数)一起使用的变量必须为int
。
printf
格式说明符"%C"
(带大写C
)不是标准格式说明符。它是Microsoft Visual C ++扩展,适用于wchar_t
类型的宽字符。由于您的变量symb
不是与格式说明符匹配的正确类型,因此您将undefined behavior。对于像你这样的狭隘角色,你应该使用 lower case c
。