通过输入重定向读取输入后如何将scanf输入切换到标准终端输入
我需要让我的程序从.txt文件中读取几个单词,并使用scanf()函数将它们存储到数组中。然而,我需要接受用户输入之后,也使用scanf。如何确保scanf仅在读取所有单词后才接受用户输入 我曾尝试使用scanf()和getchar()在文件末尾接受空格,以防scanf在需要用户输入时读取到空格通过输入重定向读取输入后如何将scanf输入切换到标准终端输入,c,io,scanf,C,Io,Scanf,我需要让我的程序从.txt文件中读取几个单词,并使用scanf()函数将它们存储到数组中。然而,我需要接受用户输入之后,也使用scanf。如何确保scanf仅在读取所有单词后才接受用户输入 我曾尝试使用scanf()和getchar()在文件末尾接受空格,以防scanf在需要用户输入时读取到空格 char w[15][100]; for(int i =0;i<15;i++) { if(scanf("%s", &w[i][0])=1) { scanf
char w[15][100];
for(int i =0;i<15;i++)
{
if(scanf("%s", &w[i][0])=1)
{
scanf("%s", &w[i][0]);
}
getchar();
printf("Word read\n");
}
bool validAnswer2=false;
while(validAnswer2==false)
{
printf("Would you like to play again?\nType \"y\" to play again or \"n\" to exit: ");
scanf(" %c", &reply);
getchar();
if(reply=='y')
{
validAnswer2=true;
}
else if(reply=='n')
{
validAnswer2=true;
}
}
charw[15][100];
对于(int i=0;iAs询问,该问题没有答案。程序通常不会重定向运行该程序的自己的输入环境(例如命令shell),而您的程序对此没有控制权。相反,请编写读取函数,以便它使用fscanf()
从提供的文件中读取。然后设置一个驱动程序,在命令行参数上循环,并按顺序打开/读取/关闭每个参数。您需要做的就是定义一些特殊字符串(例如,“-”
),如果在命令行上提供,则表示stdin
。如果(scanf(%s),&w[i][0])=1,您希望{scanf(“%s”和&w[i][0]);}
要工作吗?在第一次调用scanf
后,您要读取的字符已经在w[i][0]
中,当您第二次调用scanf
时,您正在用下一个字符覆盖该字符。另外,您是否看到%s”
和&w[i][0]之间的转换不匹配
?关于这一点的一个不错的演练是,您可以从不同的文件*读取单词,并从stdin读取其他输入。为什么要执行两次scanf?通过编写如果(scanf(…,&addr)==1)scanf(…,&addr)
,您将跳过其他每一次输入(例如,第二次scanf将覆盖第一次读取的数据)。