[C++语法语义探讨] 请帮忙解释一小段C++代码
zhangzuohai
2008-11-25
请帮忙解释一下这段代码,rail.txt的内容在下面贴出
ifstream in("rail.txt");//读取文件 for (int n,line=0;in>>n&&in.ignore();) { //请解释下,if (int n,line=0;in>>n&n&in.ignore();)是什么意思 cout < <(line++ ? "\n":""); for (string s;getline(in,s) && s!="0";){ istringstream sin(s); stack <int> st; for (int last=0,coach;sin>>coach;st.pop()){ for(int p=last+1;p <=coach;++p){ st.push(p); } if (last <coach) last=coach; if (st.top()!=coach) break; } cout < <(!sin ? "Yes\n" : "No\n"); } } rail.txt 5 3 2 1 5 4 5 4 1 2 3 5 4 3 2 1 0 6 6 5 4 3 2 1 0 0 |
|
horizonhyg
2008-11-25
in是ifstream的一个对象,就像cin是istream的一个对象一样。ifstream是istream的子类,in这里代表标准文件输入流,也可以跟cin一样使用in>>进行输入。
ignore函数定义:istream& ignore ( streamsize n = 1, int delim = EOF ),这个函数其实是istream里的函数,ifstream继承使用。故可以用in.ignore(); 此函数从输入流(in)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到(streamsize n)或者被抛弃的字符是(delim定界符),则in.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。 如果in.ignore()不给参数,则默认参数为in.ignore(1,EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束,会导致不正确的结果,因为EOF是文件结束标识。 在这里每一行的结束符是\n,所以要用in.ignore();去掉一个字符,也就是\n。 希望上面的内容能对你有所帮助,如果有感觉不对的地方请指出来,大家相互学习。 |
|
netalpha
2009-02-12
我觉的这种代码就是为了恶搞用的 写的这么难懂 肯定没看过重构
|
|
zhangyafei_kimi
2009-03-25
我觉得一般吧,这么几行重构起来完全没工作量
|
相关讨论
相关资源推荐
- mysql 取出char空格,MySQL CHAR和VARCHAR存储、读取时的差别
- mysql varchar 空格_MySQL中varchar字段值包含空格查询问题解决办法
- java jdbc处理char_有关JDBC 无法获取到Oracle的char字段数据的问题
- pb12.5 数据库char类型字段后面跟空格问题
- mysql varchar 空格_MySQL的char和varchar针对空格的处理
- mysql varchar字段自动忽略尾部空格
- 数据库字段类型CHAR和INT
- java从数据库中读取字段多出空格
- mysql数据库char类型长度_Mysql数据库Char和Varchar字段类型长度的选择比较
- mysql char转varchar2_sqlserver中char转化为varchar出现的问题