C语言中的字符流问题

libcheng 2009-10-27 06:02:57
谁能给我解释一下下面两句话:
1:函数getint通过将字符流分解成整数值而完成自由格式输入的转换,它每被调用一次就得到一个整数。
2: 函数getint中必须读出的一个额外的字符就可以写回到输入流中了。
主要问题:什么是自由格式输入的转换、什么是输入、什么叫写回到输入流中,?
最好能给两个例子。
多谢!!!!
...全文
211 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hww19898318 2010-03-16
  • 打赏
  • 举报
回复
..........................................ding
liujiaji 2010-03-16
  • 打赏
  • 举报
回复
帮顶那个!
「已注销」 2010-03-13
  • 打赏
  • 举报
回复
getint是一个接受int变量的函数,其他格式转为ASCII码输入,然后得到这个值后返回
不知道这样解释明白不,我也是新手呵呵
libcheng 2010-03-13
  • 打赏
  • 举报
回复
??????
elegant87 2010-03-13
  • 打赏
  • 举报
回复

//看看getline的原型就知道了
istream& getline ( istream& is, string& str, char delim );
istream& getline ( istream& is, string& str );
悠然红茶 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 libcheng 的回复:]
谁能给我解释一下下面两句话:
1:函数getint通过将字符流分解成整数值而完成自由格式输入的转换,它每被调用一次就得到一个整数。
2: 函数getint中必须读出的一个额外的字符就可以写回到输入流中了。
主要问题:什么是自由格式输入的转换、什么是输入、什么叫写回到输入流中,?
最好能给两个例子。
多谢!!!!
[/Quote]

不知道下面的代码对你是否有用:

/* getint: get next integer from input into *pn */
int getint(int *pn)
{
int c, sign, sawsign;

while (isspace(c = getch())) /* skip white space */
;
if (!isdigit(c) && c != EOF && c != '+' && c != '-') {
ungetch(c); /* it's not a number */
return 0;
}
sign = (c == '-') ? -1 : 1;
if (sawsign = (c == '+' || c == '-'))
c = getch();
if (!isdigit(c)) {
ungetch(c);
if (sawsign)
ungetch((sign == -1) ? '-' : '+');
return 0;
}
for (*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
*pn *= sign;
if (c != EOF)
ungetch(c);
return c;
}

此处的getint()内部其实调用的是getch(),不断从输入流中拿字符,并计算新的整数:
*pn = 10 * *pn + (c - '0');

代码中调用的getch()和getchar()不同,不需要在每次键盘输入一个字符后再加上回车。不过getch()好像不是ANSI标准的接口。

代码中大致可以看到,当从输入流中获取了“非数字”字符时,函数就退出了。这段代码不难阅读,自己看看吧。

另外,不知道你参考的是什么资料,其中说的也许就是这里的getint()吧。不过说句老实话,这种用拙劣中文拼凑出的资料还是放弃吧,它会浪费你很多精力的。与其这样,不如多读读口碑好的参考书吧。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧