在我的一个程序中,我调用了一个以main()
为单位的函数,如下所示:
function(stdin, stdout);
我的main
函数如下所示:
int main() {
function(stdin, stdout);
return 0;
}
我想问一下,有没有办法添加一些支票,这样如果有人写了一些不是./program < input > output
的东西,就会打印错误消息.
在我的一个程序中,我调用了一个以main()
为单位的函数,如下所示:
function(stdin, stdout);
我的main
函数如下所示:
int main() {
function(stdin, stdout);
return 0;
}
我想问一下,有没有办法添加一些支票,这样如果有人写了一些不是./program < input > output
的东西,就会打印错误消息.
如果用户输入的内容如下:"./PROGRAM<;INPUT&>OUTPUT",则无法完全确定
但是,您可以做一些事情来拉近距离:
1.)您可以确保参数计数小于2.(重定向到标准输入的文件不会增加参数计数)
2.)您可以在您的文件input
中创建特殊的标题.在此示例代码中,我们将确保文件头以#####
(5磅符号)开头.
以下是经过编译和测试的代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int ch, count = 0;
/* 1st check: A file redirected to stdin should add zero to arg count */
if(argc > 1)
{
printf("Invalid input: argc: %d\n", argc);
return 0;
}
/* The file that we are expecting to be redirected
* to stdin must start with 5 pound signs (#####)
* File Format: ##### Follow-on data....
*/
do{
ch = getchar();
printf("%c ", ch);
if((ch&0xFF) == '#')
count++;
else
break;
}while(1);
if(count != 5)
{
printf("Invalid input: file did not begin with ##### header. # Count: %d\n", count);
return 0;
}
else
printf("Tests passed for valid input. # Count: %d\n", count);
return 0;
}
请注意,如果在没有命令行输入的情况下启动程序,则键入#####
并按Enter键,程序将报告输入成功/有效.这就是我告诉"你不可能完美地发现……"的一个原因,因为你可以用努力来挫败意图和判断.