簡體   English   中英

具有EOF的布爾表達式不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM