[问题] getchar()读取输入数据相关

楼主: jojojen (JJJ)   2018-05-27 15:37:31
开发平台(Platform): (Ex: Win10, Linux, ...)
Mac
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Xcode
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
刚刚在练习使用getchar()
先试着读入以空格分隔的两个数字 相加后输出结果
这部分没有问题
再来想练习连续输入多组数字再一次输出所有结果
因此增加一个for循环来实现此功能
结果每次可输入的组数都会比设定的少一组
不确定是少考虑到哪个部分想请教一下
预期的正确结果(Expected Output):
input times
3 //输入
input number1 number2
1 2 //输入
input number1 number2
3 4 //输入
input number1 number2
5 6 //输入
3 7 11
错误结果(Wrong Output):
input times
3 //输入
input number1 number2
input number1 number2
1 2 //输入
input number1 number2
3 4 //输入
-272599498 3 7
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/ZvJC9C
#include <stdio.h>
int main(int argc, const char * argv[]) {
char c;
int a[2];
int cnt;
printf("input times\n");
scanf("%d", &cnt);
int ans[cnt];
int space, temp, flag;
for (int i=0; i<cnt; i++) {
space=0; temp=0; flag=0;
printf("input number1 number2\n");
while((c=getchar())!='\n') {
if (c==' ') {
a[space] = temp;
space++;
temp = 0;
flag = 0;
}
else {
flag = 1;
temp = temp * 10 + (c-48);
}
}
if(flag)
a[space] = temp;
ans[i] = a[0] + a[1];
}
for (int i=0; i<cnt; i++) {
printf("%d ", ans[i]);
}
}
补充说明(Supplement):
https://ideone.com/9FTfUB
这是没有使用for循环版本
到这步还没有问题
再麻烦各位大大指导了,感谢!
PS1:
已解决:
https://ideone.com/OOf0md
解决方式:
再加一个getchar()把多的换行符号读取掉
感谢K大~~
PS2:
后来发现读两个数字不用getchar()
只要用scanf一次读两个就好.....
int n1, n2;
scanf("%d%d", &n1, &n2);
希望其他新手不要跟我一样傻....
作者: kaneson (Lance)   2018-05-27 21:31:00
键盘输入的整行字会先放到buffer,如果里面还有剩, input相关函数优先从这buffer抓取。如果buffer 内容不足才会发生等待键盘输入。前面scanf读走了一个%d,至少还有个\n留在里面,剩下应该可以自己推理。
楼主: jojojen (JJJ)   2018-05-27 22:13:00
喔喔喔 对喔 原来被多读了一个换行!!! 感谢大大我再想想怎把那个鬼换行弄掉

Links booklink

Contact Us: admin [ a t ] ucptt.com