void main()
{
float c,f;
char an;
do
{
cout<<"enter the c: ";
cin>>c;
f=9.0/5*c+32;
cout<<"F="<<f<<endl;
cout<<"do you want to use it again:(y/n) ";
cin>>an;
}while(an=='y');
}
用上面那这些代码可以不停地输入求值
#include<stdio.h>
void main()
{
float c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
getchar();//要多写一个来吃掉回车
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
}while(an=='y');
}
以上代码如无getchar就不行。
请大侠们说说原因,谢谢^o^
21 个解决方案
#1
C和C++对输入输出流的处理如何不同?
#2
printf("enter the c: ");
scanf("%f",&c);
getchar();//要多写一个来吃掉回车?
改为:
printf("enter the c: ");
scanf("%f",&c);
fflush(stdin);
清空输入缓冲区就行了。^_^
scanf("%f",&c);
getchar();//要多写一个来吃掉回车?
改为:
printf("enter the c: ");
scanf("%f",&c);
fflush(stdin);
清空输入缓冲区就行了。^_^
#3
cin为什么没有这回事?
#4
错了, CIN也会有这种错误, 只是你的编译器不是老式的, 所以就没有了.
流处理的时候不只是输入输出, 还有一个刷新的过程, 在C++里是flush, endl里面就含有这个函数.
流处理的时候不只是输入输出, 还有一个刷新的过程, 在C++里是flush, endl里面就含有这个函数.
#5
endl是输出的,输入的呢?
#6
在输入缓冲区里面取出一个字符,其实就是吃掉最后的回车符!
#7
自已up
#8
c的输入和输出是'字节流',输入和输出的数据流的开始和结束受程序控制而不受物理符号(如回车符换行符)的控制。所以你的键盘输入会全部记录到缓冲区,具体怎么取不同的函数处理方式不同。
你取数据的方式是float,所以那个结束符会一直留在输入缓冲区中。
而cin<<f;
用将输入定位到istream流,这次输入的东东已经在istream中了,输入缓冲区中已经没有了东东,所以...
你取数据的方式是float,所以那个结束符会一直留在输入缓冲区中。
而cin<<f;
用将输入定位到istream流,这次输入的东东已经在istream中了,输入缓冲区中已经没有了东东,所以...
#9
scanf("%c",&an); 你最后在取数据时用的类型是char,而回车就是一个char,所以scanf认为那个东东就是输入结束标志,所以....
#10
你取数据的方式是float,所以那个结束符会一直留在输入缓冲区中。?
我改成int也是这样的
我改成int也是这样的
#11
c的输入和输出是'字节流',输入和输出的数据流的开始和结束受程序控制而不受物理符号(如回车符换行符)的控制。所以你的键盘输入会全部记录到缓冲区,具体怎么取不同的函数处理方式不同。
再看看上面的东东,
再看看上面的东东,
#12
这次输入的东东已经在istream中了,输入缓冲区中已经没有了东东?
在http://expert.csdn.net/Expert/topic/2061/2061686.xml?temp=.1093408这个贴子里面
xueweizhong(薛卫忠) 的回答里面
有这么几句话:
Enter a number: 1 \n<---按回车键
这时buffer = "1 \n";
cin >> n; 返回后-----> n = 1, buffer = " \n";
buffer里面还有东东啊
在http://expert.csdn.net/Expert/topic/2061/2061686.xml?temp=.1093408这个贴子里面
xueweizhong(薛卫忠) 的回答里面
有这么几句话:
Enter a number: 1 \n<---按回车键
这时buffer = "1 \n";
cin >> n; 返回后-----> n = 1, buffer = " \n";
buffer里面还有东东啊
#13
呵呵,可能我错了吧?^_^,那么他后来怎么回答了?
cin是什么,是std::basic_istream<char,std::char_traits<char>>
来自msdn:
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
cin是什么,是std::basic_istream<char,std::char_traits<char>>
来自msdn:
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
#14
还有
如果是
scanf("%d",&x);
scanf("%d",&y);中间就不需getchar()
如果是
scanf("%d",&x);
scanf("%d",&y);中间就不需getchar()
#15
scanf("%d",&x);
scanf("%d",&y);你是取整数,回车是整数吗?再看看那句话吧。^_^
如果你把第二个改成取字符试试?
scanf("%d",&y);你是取整数,回车是整数吗?再看看那句话吧。^_^
如果你把第二个改成取字符试试?
#16
说实话,我对这个东东也不熟悉,如果你要透彻了解的话,需要看汇编代码。
反者一句话,你输入了东东到缓冲区,不要指望一个scanf就能解决问题,即使是iostream。你有义务将缓冲区清空。其他的我也帮不了你了。^_^
反者一句话,你输入了东东到缓冲区,不要指望一个scanf就能解决问题,即使是iostream。你有义务将缓冲区清空。其他的我也帮不了你了。^_^
#17
/* 以下代码在vc.net环境中编译、调试通过,并正常运行 */
/* Creamdog保留所有权力 */
#include<stdio.h>
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
}while(an != 'n');
}
/* Creamdog保留所有权力 */
#include<stdio.h>
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
}while(an != 'n');
}
#18
#include<stdio.h>
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
printf("c=%d",an); //试试看,输出是10,表示换行^_^
}while(an != 'n');
}
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
printf("c=%d",an); //试试看,输出是10,表示换行^_^
}while(an != 'n');
}
#19
哇,你们想得出来呀,服了!!
#20
还有没有牛人来帮我?为什么buffer里面没有东东了?
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
有指针意味着什么?
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
有指针意味着什么?
#21
自已up
#1
C和C++对输入输出流的处理如何不同?
#2
printf("enter the c: ");
scanf("%f",&c);
getchar();//要多写一个来吃掉回车?
改为:
printf("enter the c: ");
scanf("%f",&c);
fflush(stdin);
清空输入缓冲区就行了。^_^
scanf("%f",&c);
getchar();//要多写一个来吃掉回车?
改为:
printf("enter the c: ");
scanf("%f",&c);
fflush(stdin);
清空输入缓冲区就行了。^_^
#3
cin为什么没有这回事?
#4
错了, CIN也会有这种错误, 只是你的编译器不是老式的, 所以就没有了.
流处理的时候不只是输入输出, 还有一个刷新的过程, 在C++里是flush, endl里面就含有这个函数.
流处理的时候不只是输入输出, 还有一个刷新的过程, 在C++里是flush, endl里面就含有这个函数.
#5
endl是输出的,输入的呢?
#6
在输入缓冲区里面取出一个字符,其实就是吃掉最后的回车符!
#7
自已up
#8
c的输入和输出是'字节流',输入和输出的数据流的开始和结束受程序控制而不受物理符号(如回车符换行符)的控制。所以你的键盘输入会全部记录到缓冲区,具体怎么取不同的函数处理方式不同。
你取数据的方式是float,所以那个结束符会一直留在输入缓冲区中。
而cin<<f;
用将输入定位到istream流,这次输入的东东已经在istream中了,输入缓冲区中已经没有了东东,所以...
你取数据的方式是float,所以那个结束符会一直留在输入缓冲区中。
而cin<<f;
用将输入定位到istream流,这次输入的东东已经在istream中了,输入缓冲区中已经没有了东东,所以...
#9
scanf("%c",&an); 你最后在取数据时用的类型是char,而回车就是一个char,所以scanf认为那个东东就是输入结束标志,所以....
#10
你取数据的方式是float,所以那个结束符会一直留在输入缓冲区中。?
我改成int也是这样的
我改成int也是这样的
#11
c的输入和输出是'字节流',输入和输出的数据流的开始和结束受程序控制而不受物理符号(如回车符换行符)的控制。所以你的键盘输入会全部记录到缓冲区,具体怎么取不同的函数处理方式不同。
再看看上面的东东,
再看看上面的东东,
#12
这次输入的东东已经在istream中了,输入缓冲区中已经没有了东东?
在http://expert.csdn.net/Expert/topic/2061/2061686.xml?temp=.1093408这个贴子里面
xueweizhong(薛卫忠) 的回答里面
有这么几句话:
Enter a number: 1 \n<---按回车键
这时buffer = "1 \n";
cin >> n; 返回后-----> n = 1, buffer = " \n";
buffer里面还有东东啊
在http://expert.csdn.net/Expert/topic/2061/2061686.xml?temp=.1093408这个贴子里面
xueweizhong(薛卫忠) 的回答里面
有这么几句话:
Enter a number: 1 \n<---按回车键
这时buffer = "1 \n";
cin >> n; 返回后-----> n = 1, buffer = " \n";
buffer里面还有东东啊
#13
呵呵,可能我错了吧?^_^,那么他后来怎么回答了?
cin是什么,是std::basic_istream<char,std::char_traits<char>>
来自msdn:
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
cin是什么,是std::basic_istream<char,std::char_traits<char>>
来自msdn:
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
#14
还有
如果是
scanf("%d",&x);
scanf("%d",&y);中间就不需getchar()
如果是
scanf("%d",&x);
scanf("%d",&y);中间就不需getchar()
#15
scanf("%d",&x);
scanf("%d",&y);你是取整数,回车是整数吗?再看看那句话吧。^_^
如果你把第二个改成取字符试试?
scanf("%d",&y);你是取整数,回车是整数吗?再看看那句话吧。^_^
如果你把第二个改成取字符试试?
#16
说实话,我对这个东东也不熟悉,如果你要透彻了解的话,需要看汇编代码。
反者一句话,你输入了东东到缓冲区,不要指望一个scanf就能解决问题,即使是iostream。你有义务将缓冲区清空。其他的我也帮不了你了。^_^
反者一句话,你输入了东东到缓冲区,不要指望一个scanf就能解决问题,即使是iostream。你有义务将缓冲区清空。其他的我也帮不了你了。^_^
#17
/* 以下代码在vc.net环境中编译、调试通过,并正常运行 */
/* Creamdog保留所有权力 */
#include<stdio.h>
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
}while(an != 'n');
}
/* Creamdog保留所有权力 */
#include<stdio.h>
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
}while(an != 'n');
}
#18
#include<stdio.h>
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
printf("c=%d",an); //试试看,输出是10,表示换行^_^
}while(an != 'n');
}
void main()
{
double c,f;
char an;
do
{
printf("enter the c: ");
scanf("%f",&c);
f=9.0/5*c+32;
printf("F=%f\n",f);
printf("do you want to use it again:(y/n) ");
scanf("%c",&an);
printf("c=%d",an); //试试看,输出是10,表示换行^_^
}while(an != 'n');
}
#19
哇,你们想得出来呀,服了!!
#20
还有没有牛人来帮我?为什么buffer里面没有东东了?
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
有指针意味着什么?
explicit basic_istream(
basic_streambuf<Elem, Tr> *_Strbuf
);
basic_istream里面可是有一个指针的哦?
有指针意味着什么?
#21
自已up