[英]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
之前發生了什么。 這樣的一個例子是
c = '0'
c
之后的字符是)
ungetc
東西后,緩沖區是否不刷新? 可能會發生什么,當輸入是stdin
而不是文件時,它可以正常工作嗎? (我不太熟悉C語言中的IO)。
編輯:應該使用fscanf
...男孩是我的臉紅。
當到達末尾或發生錯誤時, getc()
將返回EOF,因此請確保進行檢查。 您的c
必須是int而不是char才能區分EOF。
scanf檢查EOF的返回值也是如此。 對於scanf,轉換也可能會失敗,如果scanf("%i", &n)
成功地將某些內容解析為n
,則應返回1,因此請確保也進行了檢查。
您也正在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.