首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

EOF(end of file)怎么使用最好

2013-11-06 
EOF(end of file)如何使用最好?#includestdio.hint main() {int a,bwhile(scanf(%d%d,&a,&b)!EOF){p

EOF(end of file)如何使用最好?
#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行式子,为什么不是一行呢? c?语言
[解决办法]
因为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 }     
~     

上面这个程序用来解决死循环的问题
[解决办法]
引用:
因为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 }     
~     

上面这个程序用来解决死循环的问题


++
[解决办法]
while(scanf("%d%d",&a,&b) == 2)
在这个上下文,这样写while condition最好。
[解决办法]
引用:
while(scanf("%d%d",&a,&b) == 2)
在这个上下文,这样写while condition最好。


嗯,我也建议这样
[解决办法]
#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.

热点排行
Bad Request.