Xcode 里的 Command Line Tool,getchar 用什么代替?

2014-10-14 16:59:35 +08:00
 lisonfan
int a,b;
char ysf;
printf("请输入第一个数:");
scanf("%d",&a);
printf("请输入第二个数:");
scanf("%d",&b);
printf("请输入一个运算符");
fflush(stdin);
ysf=getchar();
switch (ysf) {
case '+':
printf("%d+%d=%d",a,b,a+b);
break;
case '-':
printf("%d-%d=%d",a,b,a-b);
break;
case '*':
printf("%d*%d=%d",a,b,a*b);
break;
case '/':
printf("%d/%d=%d",a,b,a/b);
break;
default:
printf("无法识别您输入的运算符!");
break;
}

不能输入运算符
3058 次点击
所在节点    问与答
5 条回复
lisonfan
2014-10-14 17:00:52 +08:00
请输入第一个数:1
请输入第二个数:2
请输入一个运算符无法识别您输入的运算符!Program ended with exit code: 0
jox
2014-10-14 17:39:01 +08:00
ಠ_ಠ

首先,getchar是C标准库里的一个函数,跟xcode和command line tool没关系。

然后,scanf这个函数,不会读换行符,实际上你输入的字符序列是:
1\n2\n

第一个scanf读取1,第二个scanf跳过第二个\n之后读取2,现在stdin里的字符序列还剩下:\n,最后一个函数getchar读取最后那个\n字符之后,程序结束。

想要读入运算符的话,可以实现你需要的功能的修正是:在ysf=getchar();之前再加一句getchar();把那个\n消耗掉,最后的getchar没有字符可读,只好等待新的输入了。

这是修正之后的执行结果:

请输入第一个数:1
请输入第二个数:2
请输入一个运算符*
1*2=2
lisonfan
2014-10-14 17:56:05 +08:00
@jox thank you very much!
lisonfan
2014-10-14 17:57:26 +08:00
@jox 我在Windows平台上用Dev C++开发不会出现这个问题,所以我就直接将Dev C++上写的直接copy在Xcode上了
jox
2014-10-14 18:38:51 +08:00
C++我不懂啊,标准C的scanf函数的行为就是这样的,不同平台可能行为会不一样吧,一般写C程序不在xcode里写啊,既然都有xcode了,就是用苹果电脑了,用编辑器编辑C源程序,然后用make编译就行,我觉得那样更方便。

比如我用emacs(编辑器软件)写好一个C的源代码文件,v.c,然后在v.c所在的路径下输入make v,这样就编译完成了,生成的可执行文件默认的文件名是v,直接执行v就可以观察程序的运行结果了。xcode用来写Objective-C挺方便的,写C我感觉不太好用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/138884

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX