【发布时间】:2016-01-17 00:51:12
【问题描述】:
我正在尝试编写一个函数来从用户那里获取十进制输入并返回从 ASCII 转换而来的实际值。但是,该函数会导致跳过用户的下一个输入。如:
输入输入:123
输入输入:/* 不;允许输入 */
输入输入:456
long sum = 0;
int character = fgetc(stdin);
while(character != '\n'){
if(character >= '0' && character <= '9'){
/* convert from ASCII */
character -= '0';
sum = sum * 10 + character;
}
else{
/* reenter number */
}
character = fgetc(stdin);
}
return sum;
【问题讨论】:
-
使用
<ctype.h>和isdigit();考虑换行符;考虑EOF。最好使用int作为fgetc()返回的值。如果您显示正在使用的sum,或者根本不显示sum,那就更好了。实际上,一个完整的功能会更好。请尽快阅读About 页面,了解如何创建 MCVE (How to create a Minimal, Complete, and Verifiable Example?)。 -
这不是转载。
-
我似乎在标准输入缓冲区中有一个额外的换行符。有什么理由吗?
-
空的
else子句有什么内容吗?如果没有,请将其删除。它正式并没有造成任何伤害,但它看起来很傻 - 好像有人打算写点东西但忘记回来完成它。
标签: c