我正在尝试编写一个程序,它给出一定数量的输入将输出所列输入的乘积(只有0-9的会计输入而忽略其他输入)。 例如:输入:345将导致输出:60,或另一个示例,输入:3t4和输出:12
我已经做了很多次尝试,这就是我所坚持的:
#include main(){ int c,i; c = getchar(); i = 1; while (c!= 'n'){ if (c>=48 && c<=57){ i=c*i; c=getchar(); } } printf("%d",i); }
更改
i = c*i;
至
i = (c - '0')*i;
这里发生的是变量c
包含数字的ascii值而不是数字。 所以, '0'
是48, '1'
是49,依此类推。 所以当你输入12时,你不会得到1x2
而是49x50
。
看看ascii图表。
从内部if块中删除花括号
#include main() { int c,i; c = getchar(); i = 1; while (c!= 'n'){ if (c>=48 && c<=57) i = (c-'0')*i; c=getchar(); } printf("%d",i); }
您必须将已读取的字符转换为相应的数字值。 由于您只使用单个数字,因此可以利用/滥用“0”到“9”的ASCII字符按顺序(从48到57)的事实。
使用do { } while()
而不是while() { }
可以避免在循环外“预设” c
的需要。
main
的正确标头是int main(void)
或int main(int argc, char *argv[])
,你应该从main
return
一个值。
以下应该有效,但我承认我没有编译或测试它:
#include int main(void) { int c; /* Character read */ int i = 1; /* Product */ do { c = getchar(); if (c>='0' && c<='9'){ i *= (c-'0'); } } while( c != 'n' ); printf("Product: %dn",i); return 0; }
2要注意的事项:(1)。 删除if块的花括号。 (2)。 负责从ascii代码到数字的转换。 i =(c – ‘0’)* i;
以上就是c/c++开发分享基本的C编程相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/518812.html