#include <iostream>
#include <fstream>
int main() {
std::fstream inf( "ex.txt", std::ios::in );
while( !inf.eof() ) {
std::cout << inf.get() << "\n";
}
inf.close();
inf.clear();
inf.open( "ex.txt", std::ios::in );
char c;
while( inf >> c ) {
std::cout << c << "\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我真的很困惑eof()功能.假设我的ex.txt的内容是:
abc
Run Code Online (Sandbox Code Playgroud)
它总是读取一个额外的字符,并-1在阅读时显示eof().但是inf >> c给出了'abc'的正确输出?任何人都可以帮我解释一下吗?
大多数语言如C++在写入文件时,即使我们错过编写如下语句,也会输入EOF字符:
filestream.close
但是有什么办法,我们可以根据我们的要求,在C++中为一个实例放置EOF字符.或者除了使用C++中提供的函数之外我们可以使用的任何其他方法.
如果您需要询问更多信息,请发表评论.
提前致谢.
编辑:感谢您的支持,但这里是这个问题的补充:
如果,我们想欺骗OS和放置一个EOF字符的文件和EOF了一些数据后写了这么像的notepad.exe应用程序不能我们EOF字符后阅读.我已阅读的答案与此主题相关的问题,并已经开始知道nowdays OS一般看不到一个EOF字符,而检查文件的长度让知道关于该文件的长度,但正确的想法,有必须在OS的程序,其将被检查的文件的长度,然后更新所述文件中的记录.
我很抱歉,如果我错了,在我估计任何一点,但请你帮我,因为它可以导致很多新的想法.
使用set eol选项Vim会在保存文件末尾时自动添加换行符.我有这个选项,但我希望能够在Vim中看到这个换行符,所以我知道它实际上存在.
例如,在Vim中有一个文件: 
和TextMate中的相同文件: 
这总是欺骗我,我最终添加了第二条新线,最后才意识到.这个完全相同的问题发布在这里,但接受的答案没有回答这部分问题.
使用set list:
我可以看到$在最后一行之后有一个字符表示一个新行,但是这也用这些字符填充了文件的其余部分.我知道我可以为此设置一个切换但我真的更喜欢TextMate之类的行为.
有没有一种简单的方法来检查文件是否为空.就像你将一个文件传递给一个函数并且你意识到它是空的一样,那么你马上关闭它?谢谢.
编辑,我尝试使用FSEEK方法,但我得到一个错误说"不能转换到ifstream的FILE*".
我的函数的参数是
myFunction(ifstream &inFile)
Run Code Online (Sandbox Code Playgroud) 我java.io.EOFException在Android上使用Spring REST模板时收到了.
stacktrace原因如下:
Caused by: java.io.EOFException
at libcore.io.Streams.readAsciiLine(Streams.java:203)
at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560)
at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:49)
at org.springframework.http.client.SimpleClientHttpResponse.getStatusCode(SimpleClientHttpResponse.java:55)
at org.springframework.http.client.BufferingClientHttpResponseWrapper.getStatusCode(BufferingClientHttpResponseWrapper.java:47)
at com.company.util.LoggingClientHttpRequestInterceptor.intercept(LoggingClientHttpRequestInterceptor.java:33)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.execute(InterceptingClientHttpRequest.java:81)
at com.company.api.interceptor.AuthTokenInterceptor.intercept(AuthTokenInterceptor.java:51)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.execute(InterceptingClientHttpRequest.java:81)
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:67)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:46)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:63)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:475)
... 14 more
Run Code Online (Sandbox Code Playgroud)
另一个类似的堆栈跟踪:
org.springframework.web.client.ResourceAccessException: I/O error: null; nested exception is java.io.EOFException
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:490)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:438)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:414)
at com.company.api.ApiClient_.logLoginAttempt(ApiClient_.java:299)
at com.company.security.CompanyAuthenticationService$2.onCreateCall(CompanyAuthenticationService.java:206)
at com.company.api.SafeApiCall.doInBackground(SafeApiCall.java:49)
at com.company.api.SafeApiCall.doInBackground(SafeApiCall.java:22)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856) …Run Code Online (Sandbox Code Playgroud) 我当前的代码读取用户输入直到换行.但我试图将其更改为一种格式,用户可以写入输入,直到strg + d结束输入.
我目前这样做:
input = raw_input ("Input: ")
Run Code Online (Sandbox Code Playgroud)
但是如何将其更改为EOF-Ready版本?
我知道EOF并且'\0'是整数类型,但如果是这样,它们不应该有固定值吗?
我打印了两个并获得-1 EOF和0 '\0'.但这些价值是固定的吗?
我也有这个
int a=-1;
printf("%d",a==EOF); //printed 1
Run Code Online (Sandbox Code Playgroud)
是EOF和'\0'整数的值?
你怎么看到最后一个印刷品?换句话说,EOF需要投入什么?我检查了定义,它说EOF是-1.
如果你输入Ctrl-D,你将看不到任何东西.
#include <stdio.h>
int main() {
int c;
while((c = getchar() != EOF)) {
printf("%d\n", c);
}
printf("%d - at EOF\n", c);
}
Run Code Online (Sandbox Code Playgroud) while True:
reply = input('Enter text')
if reply == 'stop': break
print(reply.upper())
Run Code Online (Sandbox Code Playgroud)
结果是:
Run Code Online (Sandbox Code Playgroud)Enter text:Traceback (most recent call last): File "C:\PythonProjects\5.py", line 2, in <module> reply = input('Enter text:') EOFError: EOF when reading a line [Finished in 0.2s with exit code 1]
它只在Sublime Text 2.我试过IDLE,试过命令行,一切都很完美.为什么Subleme会对我大喊大叫?
顺便说一句,也许你也可以解释我在这种情况下可能意味着什么.当然,我在文档中已经读过,如果从输入中读取EOF,则会引发相应的错误.我想模仿这种情况.仅输入键盘?如果是,我应该输入什么组合键才能获得EOF?
先感谢您.