C语言中的scanf,printf与C++中的cin,cout调用机制有什么区别?如何交叉使用?

levinjoe 2003-04-22 10:55:10
最近重新学习C语言,对printf,scanf的调用机制不是很明白。一般的书也没解释清楚。能具体解析一下吗?与C++语言里的cin,cout调用有何区别?以前我在使用C++时,交叉使用时经常发现输出格式如同天书,很难控制。
例如:
如下程序是用来检验 % 的取余功能。
#include <stdio.h>

void main()
{
int x,y,result,c;
do
{
scanf("%d %d",&x,&y);
printf("The anser is :");
scanf("%d",&result);
if( result== x%y )
{
printf("You are right!\n");
}
else
{
printf("The right answer is : %d", x%y);
};
printf("Are you again (\'y\' or \'n\'):");
c=getchar();
if ( c=='\n' )
c=getchar();
}while( c!='n' );
}
我不明白,为什么不加:
if( c=='\n' )
c=getchar();
就会不正常。跟踪调试时发现第一个getchar()得到的是10('\n'),为什么?改用scanf("%c",&c),更加不正常。请问如何是改正?
最后希望有人能为我谈谈底层的调用机制。
以上调试使用的是vc6.0。
希望大侠多多帮忙!!
...全文
1088 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
x2jack 2003-04-23
  • 打赏
  • 举报
回复
如果要在同一个程序中使用两个库,必须调用一个特殊的iostream函数。
#include <stdio.h>
#include <iostream.h>
main()
{
ios::sync_with_stdio();// call this function so iostream works with stdio
cout << "now use iostream\n";
printf("and stdio\n");
}
pooryaya 2003-04-23
  • 打赏
  • 举报
回复
scanf printf为C里的输入输出
cin cout为C++里的标准输出流,在前面必须包括头文件<iostream.h>
如果要在C++里用scanf printf的话那么还要在前面包括头文件<stdio.h>
这是为了包容C
最好在C++里用cin cout
我喜欢用cin cout
Rtxc 2003-04-23
  • 打赏
  • 举报
回复
C++里没有c这么严格的数据结构
跟踪调试时发现第一个getchar()得到的是10('\n'),我也发现了
看getchar()函数----,遇到回车才把将改行字符送buffer,然后GETCHAR()
从BUFFER中取一个字符给C,按照函数调用法,栈得应用,当然那个字符
是'\n',然后是\y'
通常我是这样用的 两次执行c=getcher() c=getchar()
与printf无关

linchwu 2003-04-23
  • 打赏
  • 举报
回复
up
asdmonster 2003-04-23
  • 打赏
  • 举报
回复
mark
yyfzy 2003-04-23
  • 打赏
  • 举报
回复
C里的要指定数据类型,每个数据类型有不同的输入和输出格式
但C++里没有这么严格
用户 昵称 2003-04-23
  • 打赏
  • 举报
回复
ZT

流是一个抽象的概念,在实际操作时必须与具体设备连接起来。C++中预定义了以下的四个流所连接的具体设备:
cin 与标准输入设备相关联
cout 与标准输出设备相关联
cerr 与标准错误输出设备相关联(非缓冲方式)
clog 与标准错误输出设备相关联(缓冲方式)
操作系统在缺省情况下,指定输出设备是显示终端,标准输入设备是键盘。在任何情况下指定的标准错误输出设备是显示终端。


请看下面的程序:
#include <iostream.h>
main (int argc,char *argv[])
{
if(argc != 2)
cout<<"Error! Usage:prog anString<CR>"<<endl;
else
{
cout<<"Enter an interger:";
int data;
cin>>date;
cout<<"The user is"<<arfv[1]<<endl;
cout<<"The data you entered is"<<data<<endl;
}
}

cout语句的作用是把<<运算符后的串或数从标准输出设备上输出,由于<<算符是左结合的,即cout<< i<< j相当于( (cout<<i) << j ),所以cout与printf()函数的作用类似。endl是预定义的换行符。
cout<<"Error! Usage:prog anString<CR>"<<endl;
cout<<"Enter an interger:";
cout<<"The user is"<<arfv[1]<<endl;
cout<<"The data you entered is"<<data<<endl;

cin 语句的作用是把标准输入设备上的输入赋给>>运算符后变量,由于>>算符是左结合的,即cin >> i>> j相当于( (cin >>i) >> j ),先给i赋值再给j赋值,所以cin与scanf()函数的作用类似。
cout<<"Error! Usage:prog anString<CR>"<<endl;
cout<<"Enter an interger:";
cout<<"The user is"<<arfv[1]<<endl;
cout<<"The data you entered is"<<data<<endl;
cin>>date;

用户 昵称 2003-04-23
  • 打赏
  • 举报
回复
#include <iostream.h>
一般可以,在最新的gcc上出警告
sunflowerwll 2003-04-22
  • 打赏
  • 举报
回复
在scanf语句后加入
fflush(stdin); /* flush the input stream in case of bad input */
就可解决问题了
Jinglihui 2003-04-22
  • 打赏
  • 举报
回复
我在C++从不交叉使用
bigtea 2003-04-22
  • 打赏
  • 举报
回复
up
第一讲:新语言功能…………………………………………………4 第二讲:类和对象(一)………………………………………………15 第三讲:类和对象(二)………………………………………………26 第四讲:静态成员……………………………………………………37 第五讲:对象堆分配…………………………………………………44 第六讲:单继承………………………………………………………52 第七讲:虚函数………………………………………………………61 第八讲:多继承和友元………………………………………………73 第九讲:运算符重载…………………………………………………84 第十讲:IO流………………………………………………………91 第十一讲:模板和异常……………………………………………103 了解在非面向对象方面C++也作了很多工作 了解由于引入了函数默认值和函数的重载而引发 熟悉变量的引用是不需要分配内存空间的 熟练运用使用cin,cout,处理输入和输出 熟练运用简单数据类型的const用法 熟练运用简单变量的引用 熟练运用函数的默认参数设定 熟练运用函数的重载

70,037

社区成员

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

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