EOF(end of file)如何使用最好?

Jst_do_IT 2013-11-04 06:22:46
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d+%d=%d\n",a,b,a+b);
}



}



这个程序输入不是int型就出来n行式子,为什么不是一行呢?
...全文
202 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-11-05
  • 打赏
  • 举报
回复
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
还有多远 2013-11-04
  • 打赏
  • 举报
回复
引用 5 楼 ForestDB 的回复:
while(scanf("%d%d",&a,&b) == 2) 在这个上下文,这样写while condition最好。
嗯,我也建议这样
ForestDB 2013-11-04
  • 打赏
  • 举报
回复
while(scanf("%d%d",&a,&b) == 2) 在这个上下文,这样写while condition最好。
AnYidan 2013-11-04
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
因为scanf输入的格式和要求的格式不同时,返回值为0,0和EOF比较不相等,则继续循环,但上次输入的内容还在行缓冲里,这次又从还缓冲里都到错误的数据,返回值又和EOF不相同,继续循环,所以就成了死循环。
  1 #include<stdio.h>
  2 int main(void)
  3 {   
  4      char str[20];
  5      int a,b;
  6      int rtval = 0;
  7      while((rtval = scanf("%d%d",&a,&b)) !=EOF)
  8      {   
  9          if (rtval == 0)
 10              gets(str);    //用于接收输入到缓存里的错误数据比如字母
 11          fflush(stdin);
 12          printf("%d+%d=%d\n",a,b,a+b);
 13      }   
 14 
 15     return 0;
 16 }     
~     
上面这个程序用来解决死循环的问题
++
自信男孩 2013-11-04
  • 打赏
  • 举报
回复
因为scanf输入的格式和要求的格式不同时,返回值为0,0和EOF比较不相等,则继续循环,但上次输入的内容还在行缓冲里,这次又从还缓冲里都到错误的数据,返回值又和EOF不相同,继续循环,所以就成了死循环。
  1 #include<stdio.h>
  2 int main(void)
  3 {   
  4      char str[20];
  5      int a,b;
  6      int rtval = 0;
  7      while((rtval = scanf("%d%d",&a,&b)) !=EOF)
  8      {   
  9          if (rtval == 0)
 10              gets(str);    //用于接收输入到缓存里的错误数据比如字母
 11          fflush(stdin);
 12          printf("%d+%d=%d\n",a,b,a+b);
 13      }   
 14 
 15     return 0;
 16 }     
~     
上面这个程序用来解决死循环的问题
max_min_ 2013-11-04
  • 打赏
  • 举报
回复
google下 scanf的返回值吧!
Jst_do_IT 2013-11-04
  • 打赏
  • 举报
回复


运行如图

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧