1. while(scanf("%d",a+i)!=EOF)
scanf的返回值为成功scan入的个数,若一个都没有成功录入则为0,若遇到错误或遇到end of file,返回值为EOF。但是① Linux中,在新的一行(回车键)的开头,按下Ctrl+D,就代表EOF;
② Windows中的DOS,在新的一行(回车键)的开头,按下Ctrl+Z,表示EOF。
另外:对于一些将Tab,Space和Enter当做普通字符输入的场景中,例如Java的Scanner类的hasNext()方法,回车,Tab和空格是被当做普通字符读取了,不会使系统的读取停止,此时要用Ctr+Z才可停止输入。
2.九九乘法表这种要对齐的如何解决(位数多了就不整齐了)
#include<iostream>
int main(int argc,char **argv)
{
using namespace std;
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++)
cout<<i<<"*"<<j<<"="<<i * j<<" "; //同一行不同乘式之间用固定的间隙(3个空格)隔开
cout<<endl;
}
return 0;
}
结果:
可以看到,3*5=15开始错位了,要是一位数和三位数之间乘法表,则错位更大
为此,不用单独判断结果位数取动态控制间隔,可以利用已有的转移字符“\t”来对齐:
#include<iostream>
int main(int argc,char **argv)
{
using namespace std;
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++)
cout<<i<<"*"<<j<<"="<<i * j<<"\t"; //使用转移字符\t
cout<<endl;
}
return 0;
}
结果:
说明:
\t是自动跳至下个制表位(Tab),一般为四个空格位,不同编译器可能有所不同,但是,同时它具有自动对齐功能,效果不再赘述,见上结果。