回 帖 发 新 帖 刷新版面

主题:vc++中scanf命令的使用问题

我是vc++初学者,今天刚做了个练习
#include <stdio.h>
main()
{
    int x,y,a1,b1,c1;
    scanf("x=%d,y=%d",&x,&y);
    scanf("%d,%d,%d",&a1,&b1,&c1);
    printf("x=%d,y=%d\n",x,y);
    printf("a1=%d,b1=%d,c1=%d\n",a1,b1,c1);
}

这个我可以使结果正常输出,但是改成这样
#include <stdio.h>
main()
{
    int x,y,a1,b1,c1;
    scanf("x=%d,y=%d",&x,&y);
    scanf("a1=%d,b1=%d,c1=%d",&a1,&b1,&c1);
    printf("x=%d,y=%d\n",x,y);
    printf("a1=%d,b1=%d,c1=%d\n",a1,b1,c1);
}
我就无法得到想要的结果了,问题是我输入“x=1,y=2”然后enter就开始运算了,我还没输入a1,b1,c1的数值啊,而第一个程序我按enter后会让我继续输入a1,b1,c1的数值,这到底是为什么啊?请教高人解答

回复列表 (共6个回复)

沙发


不能这样写scanf("x=%d,y=%d",&x,&y);
因为scanf语句中scanf(“  ”,)引号中是填数据类型,逗号后是将你输入的数据保存到其中。

板凳

很感谢你的回答啊,但是问题不是这个,我用scanf的格式是没错的,只是复制到论坛这里就变样了,我说清楚点。我第一个练习执行然后输入 (x=1,y=2 enter 3,4,5 enterr)就得到结果 (x=1 y=2 a1=3 b1=4 c1=5),这样的话,我第2个程序输入 (x=1,y=2 enter a1=3,b1=4,c1=5 enter)应该得到(x=1 y=2 a1=3 b1=4 c1=5),但是怎么都输不出来啊

3 楼

呵呵。这我就不知道了。

4 楼

还是很感谢你

5 楼

C编程时一定要注意scanf等输入函数的连续调用可能会出现的问题,在你的问题中你一次调用scanf时将输入送进内存时健入的回车键也是一个字符,而这次调用并不会接它,回车仍保留在输入流中,因此当你连续第二次调用这个函数时正好接收到这个字符,由于回车符有结束输入的作用,因此后面需要接受输入的变量存储空间没有机会再从健盘上接输入内容.至这两段程序为什么前一个可按本意执行,后一个不可以的原因是回车字符不是数字,第一段程序的第二个scanf首先要一个int,这时将舍弃输入流前的回车字符,所以能从后续健盘输入获得输入,而第二段程序的第二个scanf首先需接收的正好是一个字符("a"),因此在这里就将回车字符与之对应了,然后就结束了这次输入,后面的"1=%d,b1=%d,c1=%d"都没有机会获得输入了,如果你确实要这样做,可在两个scanf之间插入一个类似getchar函数来舍弃掉前一次输入时遗留下的回车.

6 楼

既然是用VC++就用 C++的 输入输出流
#include <iostream.h>
或者 考虑 命名空间:  #include <iostream>
                      using namespace std;
int main()
{
   int x,y,al,bl,cl;
   cout<<"x=";
   cin>>x;
   .....
}
这样就不会出错了!
也不会出现 象你所说的那样错误了!!

因为:
   scanf 和 printf 操作方向 与我们的思维不是很一样、、1
他们采用的是 自右向左的!
还有...


我来回复

您尚未登录,请登录后再回复。点此登录或注册