Equivalent of fseek and ftell in main
我想知道在Main工作时是否有fseek和ftell的等效项。
例如,如果在询问时输入文件名,最后按回车键。 接下来,我将询问用户另一个文件名,但是缓冲区中有一个未读的'\
'。 用户将无法键入第二个文件的名称,因为程序将读取'\
'。 所以我想在缓冲区中向前移动一个位置。 通常在文件中,我会做:
我主要是想做同样的事情,而不使用文件。
-
您的意思是从console / stdin读取输入吗? 如果是这种情况,则需要刷新输入流。 请参阅这篇文章的指针
-
您正在使用文件。 您正在使用的文件恰好是stdin。 例如,getc(stdin)和getchar()`是完全等效的。 可以将stdin视为隐式参数。
-
您究竟如何读取该文件名? 如果使用fgets(),ti将消耗\
。 如果使用scanf("%s", ...),则不会,但是不能避免溢出存储名称的数组。 向我们展示一个完整的小型程序,我们可以帮助您正常运行。 就目前而言,您假设fseek是正确的解决方案。 您几乎肯定会遇到XY问题。
实际上,可以在main中使用fseek,您只需要将FILE * stream设置为stdin,那么它将是:
-
您的问题(和答案)没有道理。 当然,您可以在main中调用fseek。 你为什么不能呢? 您是在问关于诸如stdin之类的东西(与main无关)调用fseek和ftell的问题。 也就是说,在stdin上调用fseek没有多大意义。 另请参阅:stackoverflow.com/questions/4917801/
-
我知道您必须指定一个文件来使用fseek,我只是不知道我想要的文件是stdin,它从控制台读取了输入。
最简单的方法就是说
甚至更短
并忽略返回的字符。