gpt4 book ai didi

c - 如何确定标准输入是否为空

转载 作者:行者123 更新时间:2023-12-04 09:30:44 24 4
gpt4 key购买 nike

我有一个小项目要为学校做。我们有一个生成迷宫的程序。
我们可以放置参数来生成不同的迷宫,甚至可以将其作为图片。
我们这样称呼它:

./test


或者

./test --arg1 val --arg2 val --etc


我们被要求将参数解析为我们放入标准输入的文件,如下所示:

./test < args.txt


现在我必须能够用上面的每一行调用程序。带有参数的行有效,我的程序在 stdin 中有效,但没有任何内容的行不再有效。
所以我应该检查用户是否在标准输入中发送了一些文件,我用文件调用程序,否则我用正常方式调用它。我尝试过 feof 但它无法工作,因为标准输入甚至在 eof 中都没有任何内容。
当我在没有参数或文件的情况下调用程序时,它会等待用户写一些它不应该写的东西。
基本上我的代码应该是这样的
int main()
{
int v;
if (stdin!=NULL)) { //if a file has been passed "./test <test.txt"
scanf("%d",&v);
}
else { //if no files has been passed "./test "
printf("no file forwarded \n");
return 1;
}
if (v<50) {
printf("you drive slow\n");
}
else {
printf("you drive fast\n");
}
return 0;
}
但显然 (stdin != NULL)不起作用。那么有没有办法检查stdin是否有东西?
我问了我的同学,其中一个告诉我有关使用 fgetc 获取第一个字符的事情,如果确实有字符,则将其放回去,但是当我尝试使用 fgetc 时,如果没有字符,它会等待我放一个字符字符输入。
那么如何检查 stdin 是否为空或其中是否有文件(不使用新库)?
提前谢谢你
祝你有美好的一天
如果我不完全清楚,请告诉我我不是母语人士,我有一些困难,因为这是一个技术问题

最佳答案

听起来您想根据命令行上提供的参数或从文件中输入的参数来运行程序。如果是这样,您应该首先检查命令行上是否提供了参数:

if (argc > 1) {
//parse argv
}

然后,检查 stdin 是否为空,如果没有从 stdin 中读取参数:
else if ((fseek(stdin, 0, SEEK_END), ftell(stdin)) > 0)
{
rewind(stdin);
char buffer[1024];
fgets(buffer, 1024 , stdin);
//parse args read in from stdin
}
else
{
//no redirection
}

关于c - 如何确定标准输入是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com