[英]Boolean expression with EOF not working
我試圖編寫一段代碼,讓用戶輸入無限數量的字符串(僅受內存限制),其中每個字符串的長度最多為298個字符(298個數組,其中一個為'\\ n'和'\\ 0'結束)。 結束信號應為EOF(在Win上為Strg + Z,在Linux上為Stg + D)。 當我將EOF更改為'a'或任何其他字符而不使用EOF時,此處的代碼工作正常。 我很想調試它,但是不幸的是我無法將EOF放入日食中。 那么,有誰知道為什么EOF(應該為-1)和一個字符之間存在差異,或者如何將EOF放入日食中?
while(boolean == 0)
{
fgets(buff_memory, 300, stdin);
for (i = 0; i < 300; i++)
{
if (buff_memory[i] == EOF)
{
all_memory[current_max - 1] = '\0';
boolean = 1;
break;
}
else if (buff_memory[i] == '\0')
{
break;
}
else
{
all_memory[current_max - 1] = buff_memory[i];
buff_memory[i] = '\0';
current_max++;
all_memory = (char *)realloc(all_memory, current_max * sizeof(*all_memory));
}
}
feof
從不將EOF
放在其輸出中。 EOF
是-1的int
值,不能用char
數組表示。 EOF
僅由getc
和類似函數返回。
在文件末尾, fgets
到達文件末尾時將返回NULL,並且您需要檢查feof
來驗證是否已達到EOF。
如果按ctrl + space,是否可以在Eclipse的自動完成列表中看到EOF? 順便說一句,您的EOF可能與Eclipse無關。 您的EOF被評估為'-1',不是char
。 同樣,Eclipse與EOF無關。 它是一個IDE,它將按照您的要求進行操作-畢竟是人為制作的。
請閱讀此內容以進一步澄清-http: //faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1048865140&id=1043284351
我找到了適合我問題的解決方案。 有了它,我可以在一行的開頭而不是中間或結尾檢測到EOF。 這是我將使用的代碼:
while (1)
{
fgets(buff_memory, 300, stdin);
if (buff_memory[0] == '\0')
{
break;
}
else
{
for (i = 0; i < 300; i++)
{
if (buff_memory[i] == '\0')
{
break;
}
else
{
all_memory[current_max - 1] = buff_memory[i];
buff_memory[i] = '\0';
current_max++;
all_memory = (char *) realloc(all_memory, current_max * sizeof(*all_memory));
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.