如何使这个程序在C中读取两位数整数和三位数?
所以这个函数从一个文件中读取整数,这些整数由空格分隔,并得到总数。它很好用 只要数字是个位数,1-9。如何使这个程序在C中读取两位数整数和三位数?,c,type-conversion,digits,C,Type Conversion,Digits,所以这个函数从一个文件中读取整数,这些整数由空格分隔,并得到总数。它很好用 只要数字是个位数,1-9。 如何使其读取1-100之间的两位数? 我是否在ifs中创建一个嵌套的if,读取每个数字,然后尝试读取紧挨着它的第二个数字,不留空格,然后读取第三个数字(案例100) 然后我把它们变成一个整数(老实说,我不知道怎么做) }这取决于您是否打算(或打算)以最少的编程工作量获得整数,或者自己练习或解决如何进行(十进制)转换 如果是前者,您需要仔细看看fscanf可以为您做些什么:如果您使用转换说明符,
如何使其读取1-100之间的两位数?
我是否在ifs中创建一个嵌套的if,读取每个数字,然后尝试读取紧挨着它的第二个数字,不留空格,然后读取第三个数字(案例100) 然后我把它们变成一个整数(老实说,我不知道怎么做) }这取决于您是否打算(或打算)以最少的编程工作量获得整数,或者自己练习或解决如何进行(十进制)转换 如果是前者,您需要仔细看看
fscanf
可以为您做些什么:如果您使用转换说明符,例如%d“
或%i”
,您可以在fscanf
的一次调用中输入任何整数
如果是后者,则使用fgetc(fp)
更有意义–使用fscanf(fp、%c、&c)
读取单个字节非常笨拙。在这种情况下,您的评论是正确的:只需从0开始,每次您找到一个(十进制)数字乘以整数结果到目前为止的10,然后添加新的数字
对代码的评论:
- 将
与c
进行比较是一种糟糕的风格,因为NULL
代表指针,尽管它的比较值等于0NULL
- 您似乎认为,如果到达文件末尾,
将被更新c
- 您似乎停在第一行的末尾:您是否在多行文件上测试了您的程序
- 您应该检查
是否返回fscanf
–务必阅读您不太熟悉的函数文档李>EOF
- 每次通过循环时,您似乎都要读取两个字符,并且只处理其中一个字符
void get_total(FILE*fp)
{
int c;
int total=0;
int value;
while (fscanf(fp, "%c", &c) )
{
if( !isdigit(c) )
{ // then some kind of number separater found
total += value;
printf("value: %d, total: %d", value, total);
value = 0;
}
else
{ // accumulate number
value *= 10; // make room for next digit
value += c - '0'; // convert digit to int
}
}
// print last value
printf("last value: %d, final total: %d", value, total);
}
搜索有关函数的内容:fgets、strtok和strtol!我认为这是一个很好的选择!(y) 。此程序正在读取字符而不是数字。该文件包含数字的ascii表示形式。您可以使用fgets加载一行,使用strtok解析它以提取表示数字的字符串,并使用strtol转换数字中的字符串。(y) 我想了一个方法来增加数字。我不确定它是否有效。但只要有两位数就行了。将第一个数乘以10,然后将第二个数相加。或3(100)乘以第一个100。第二个乘以10,再加上第三个。塞尔吉奥:我还没学会,所以我不想做我不懂的事情。如果你把字符1乘以10,如果你把它作为一个整数,你就会得到结果490;如果将其用作字符,则获得(490和255),其中&是逻辑和!因为一个字符(通常)只有8位。。。这是因为字符1的ASCII值是49(0x31)!如果你一个字符一个字符地读,你可以这样做:声明一个int;在读取一个数字的第一个字符之前,您需要执行以下操作:a=0,然后对于在到达空格之前读取的数字的所有字符,您需要执行以下操作:a=a*10+(c-48)。。。然后在整数a中有数字。是的,下一步是多行。但我不知道该怎么做。虽然我确信困难的部分已经过去了。有什么建议吗?我希望你仔细阅读我的评论:第三点是因为你的节目中有
'\n'
。
void get_total(FILE*fp)
{
int c;
int total=0;
int value;
while (fscanf(fp, "%c", &c) )
{
if( !isdigit(c) )
{ // then some kind of number separater found
total += value;
printf("value: %d, total: %d", value, total);
value = 0;
}
else
{ // accumulate number
value *= 10; // make room for next digit
value += c - '0'; // convert digit to int
}
}
// print last value
printf("last value: %d, final total: %d", value, total);
}