簡體   English   中英

scanf不終止

[英]scanf not terminating

因此,我有以下代碼(C):

char c = getc(in);
if (c == '(')
   ...
if (c == '%')
   ...
if (isdigit(c))
{
   int n;
   ungetc(c, in);
   scanf("%i", &n);
   ...
}

當我從stdin中讀取輸入時,一切都很好,但從文件中讀取輸入時,對scanf的調用不會終止。

我在調用周圍添加了一些代碼,以查看在調用scanf之前發生了什么。 這樣的一個例子是

  1. c = '0'
  2. c之后的字符是)

ungetc東西后,緩沖區是否不刷新? 可能會發生什么,當輸入是stdin而不是文件時,它可以正常工作嗎? (我不太熟悉C語言中的IO)。

編輯:應該使用fscanf ...男孩是我的臉紅。

  1. 當到達末尾或發生錯誤時, getc()將返回EOF,因此請確保進行檢查。 您的c必須是int而不是char才能區分EOF。

  2. scanf檢查EOF的返回值也是如此。 對於scanf,轉換也可能會失敗,如果scanf("%i", &n)成功地將某些內容解析為n ,則應返回1,因此請確保也進行了檢查。

  3. 您也正在in進行操作,如getc(in) ,建議您從特定的FILE *中讀取,但是您的scanf調用仍從stdin中讀取。

    在此處使用fscanf而不是scanf

在我的情況下,在scanf語句下面的某個地方存在一個無限循環,請刪除該無限循環:

unsigned long x,y; 
scanf("%llu%llu",&x,&y);
while(i<=4) {   
if(list[i]>=x && list[i]<=y)        
count++;        
//i++;      
}

scanf()將從stdin文件描述符獲取輸入。 如果重定向,則將取自適當的來源。 getc()將從任何文件描述符中讀取。 您正在混合來自文件和標准輸入的輸入。

您可能對fscanf()感興趣,可以從文件中讀取內容。

char c = getc(in);
if (c == '(')
   ...
if (c == '%')
   ...
if (isdigit(c))
{
   int n;
   ungetc(c, in);
   fscanf(in, "%i", &n);
   ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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