请先看下面一段程序:
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=0; 2 main() 3 { 4 for(;scanf("%f",&a)!=-1;) 5 b+=a; 6 printf("$%.2f",b/12); 7 }
3:重点不同处:
时间: 2024-10-06 22:28:21