问题:用C ++编写程序以显示文本文件中的数字总和。
- >
#include<iostream.h>
#include<fstream.h>
int main()
{
ifstream f1("Fees.txt");
int sum=0;
char n;
while(f1.eof()==0)
{
f1>>n;
if(isdigit(n))
{
sum=sum+n;
}
}
cout<<sum;
}
我知道程序无效,因为字符串已更改为数字,(1更改为ASCII代码49而不是1)
请指导我
有没有更好的方法来解决这个问题?
更新确定所以我将行sum + = n更改为sum + = n - &#39; 0&#39;。 当文本文件Fees.txt中除了数字之外还有一个特殊字符时,程序似乎仍然有用 例如:
1 2 9
这不起作用
1 2 9ok
这确实有效,不知道这里发生了什么?
答案 0 :(得分:3)
正如您所指出的,数字的ASCII码不会从零开始,这是您的问题。幸运的是,它们确实存在于连续范围内,因此您需要做的就是更改线路:
sum=sum+n;
到
sum += (n - '0');
答案 1 :(得分:1)
这与ASCII无关。 C和C ++标准要求'0'..'9'
的值是连续且增加的,因此转换表示数字的字符只需要减去'0'
,而不管字符编码。所以:
sum += n - '0';
将解决问题。