【发布时间】:2015-05-01 09:35:22
【问题描述】:
所以这个函数从一个由空格分隔的文件中读取整数并获取总数。它工作正常。
只要是个位数,1-9。
如何让它读取 1-100 的两位数?
我是否在读取每个数字的 if 中创建一个嵌套的 if,然后尝试在它旁边不带空格地读取第二个数字,然后再读取第三个数字(案例 100)?
然后我把它们变成一个整数(老实说我不知道该怎么做)
void get_total(FILE*fp){
char c;
int total=0;
int number_of_conversions;
number_of_conversions = fscanf(fp, "%c", &c);
while (isdigit(c) || isspace(c) && c !='\n' && c !=NULL){
if (isspace(c)){
number_of_conversions = fscanf(fp, "%c", &c);
}
else if (isdigit(c)){
total = total + (c- '0');
number_of_conversions = fscanf(fp, "%c", &c);
}
number_of_conversions = fscanf(fp, "%c", &c);
}
printf("%d", total);
}
【问题讨论】:
-
搜索一下函数:fgets、strtok 和 strtol!我觉得是个不错的选择! (y)。该程序正在读取字符而不是数字。该文件包含数字的 ascii 表示。您可以使用 fgets 加载一行,解析它以使用 strtok 提取表示数字的字符串,并使用 strtol 将字符串转换为数字。 (y)
-
我想到了一种添加数字的方法。我不确定它是否有效。但只要有两位数。将第一个乘以 10 并添加第二个。或 3 (100) 将第一个乘以 100。第二个乘以 10 并加上第三个。应该可以的。
-
sergio 我还没学过,所以我不想做我不明白的事情。
-
如果将 char 1 乘以 10,如果将其用作 int,则会得到结果 490;如果您按原样使用它,一个字符,您将获得 (490 & 255) 其中 & 是逻辑和!因为一个字符(通常)只有 8 位! ...这是因为 char 1 的 ASCII 值是 49 (0x31)!
-
如果你逐个字符地阅读字符,你可以尝试这样的事情:声明一个 int。例如:int a;在读取数字的第一个字符之前:a=0,然后对于您读取的所有字符,直到到达空格,您执行以下操作:a=a * 10 + (c - 48); ...然后在 int a 你有数字。
标签: c type-conversion digits