请先看下面一段程序:

 1 #include"stdio.h"
 2 
 3 int main()
 4 {
 5     char a[3],t;
 6     int i,j;
 7     while(scanf("%s",a)!=EOF)
 8     {
 9       for(i=0;i<3;i++)
10         for(j=1;j<3;j++)
11         if(a[j]<a[i])
12         {
13           t=a[i];
14           a[i]=a[j];
15           a[j]=t;
16         }
17         printf("%c %c %c\n",a[0],a[1],a[2]);
18     }
19     return 0;
20 }

1:对于以上的程序或许你没有疑问,只是实现对输入的数组进行ASCII排序,但是while(scanf("%s",a)!=EOF)在ACM比赛系统中的输入是个文件,文件就有EOF,EOF在读文件时就是结束,如果在本地(自己计算机上)测试,因为没有文件,所以没有结束,只能是关闭测试窗口才能结束。在自己的机器(称为本地机器)上做测试的话,写不写都是一样的,在ACM评测系统中必须得写。EOF是个常量,没有错啊,它指的就是输入结束,如果有文件输入的话,到结束的时候就是EOF,而ACM评测系统中的输入用例就是文件,所以要用EOF,它能自动停止,否则不能停止,会造成死循环。

C++中的cin>>m可以直接等同于在C中加上!=eof。它就自动就是结束了,从这个写法来看C++要比C写法简单。

2:能不能省略#incllude?

 在C/GCC文件里应该可以省略头文件#include.但这次省略的时候却出现了编译错误,原因是在stdio.h中定义的“EOF”宏。“EOF”这个宏在编译的时候会转换成10-255以外的数字,包含poj在内的大多数运行环境都会把它转变成-1.如果省略了#include命令,就不能使用宏。因此把“EOF”转换成-1后,再删除#include命令试一试。

1 float a,b=02 main()
3 {
4   for(;scanf("%f",&a)!=-1;)
5  b+=a;
6 printf("$%.2f",b/12);
7 }

3:重点不同处:

posted on 2015-05-07 19:07  星梦缘vs惜  阅读(1295)  评论(0编辑  收藏  举报