当前位置: 首页 > 知识库问答 >
问题:

读取C中的分数

梁才
2023-03-14

我如何将分数读入C来进行数学运算?(分数将包含斜杠符号)例如,用户将输入3/12。(一个字符串)程序将找到gcd,计算减少的分数并得出1/4。

我最初的计划是使用strtok()函数自己获取分子和分母,但我遇到了将分子和分母存储到单独变量中的问题。这是一种有效的方法吗?如果是这样,在标记字符串后,如何将分子和分母存储到两个单独的变量中?

void blah(void) {
  char str[30];
  scanf("%s",&str);
  char * pch;
  pch = strtok (str,"/");
  int i;
  while (pch != NULL)
  {
    i = atoi(pch);
    printf("\n%d", i);
    pch = strtok (NULL, "/");
  }
}

共有3个答案

施琦
2023-03-14

好吧。我有不同的方法。使用strtol,它会返回一个指向您添加1的'/'的指针,并在后半部分再次调用strtol

这是第一个答案的两倍,是第二个答案的一半

#include <stdio.h>
#include <string.h>

int main(){
    char *f = " 12/7 ";
    char *s;
    long n,d;
    n = strtol(f, &s, 10);
    d = strtol(s+1, NULL, 10);
    printf(" %ld/%ld \n", n, d);
    return 0;
}

为了回答你剩下的问题,如果它是一个分数,你肯定需要2个变量。如果您可以在内部使用浮点并且分数只是用户输入的一个很好的功能,那么您可以继续将它们除以并将数字存储在一个变量中。

double v;
v = (double)n / d;

强制转换为Double是为了强制对两个整数进行浮点除法。

另一方面,如果你要处理很多分数,你可能需要制作一个结构来容纳它们(如果你愿意的话,可以制作一个对象)。

struct frac {
    long num;
    long den;
};
struct frac f = { 12, 7 };
printf("%ld/%ld\n", f.num, f.den);
乐正秦斩
2023-03-14

保持一个指向字符串头部的指针。

然后研究使用strhr()获取指向字符的第二个指针。

然后您可以:

  1. 从取消引用的第一个指针读取字符,直到第一个指针等于第二个指针为止。将这些字符存储到字符[]或字符*-

使用atoi()将两个C字符串转换为整数。

如果strhr()返回NULL,那么您可以很容易地进行错误检查,因为输入字符串中没有任何代码。

通令
2023-03-14

这使用sscanf获取数字,您可以直接使用scanf,当然:

#include <stdio.h>
int main() {
  const char *s = " 13/6  \n";
  int a,b;
  sscanf(s, "%d/%d", &a, &b);
  printf("%d frac %d\n", a, b);
  return 0;
}
 类似资料:
  • 我一直在互联网上寻找帮助,但我找不到,所以我求助于发帖。 我有一个txt文件,格式如下 1/2 0 1/6 6/11 1/6 2/10 我需要读取这些单独的分数,并输入分子和分母的函数称为BigFraction(num,denom)。 我调用读取器并将其作为字符串输出。然后,我在空格上进行拆分,以获得作为字符串的各个分数,并将它们输入到我的助手方法strToBF中,该方法在正斜杠上进行拆分,并输入

  • 我遇到了一个挑战,我必须读取CSV文件并将其读取,直到定义的可变大小限制(BATCH_SIZE)。读取 CSV 中的行数后,将其发送到不同的 AWS API。由于我的CSV文件大小可以是1Gb到2Gb的任何地方,因此我避免使用JSR223 CSV文件读取。我想知道如何使用JMeter和CSV数据集配置来实现它。

  • 本文向大家介绍c#读取excel方法实例分析,包括了c#读取excel方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了c#读取excel方法。分享给大家供大家参考。具体分析如下: Provider根据实际EXCEL的版本来设置,推荐使用ACE接口来读取。需要Access database Engine。 注意修改注册表以下两项的值为0。否则导入EXCEL当单元格内字符长度超过2

  • 本文向大家介绍c#分页读取GB文本文件实例,包括了c#分页读取GB文本文件实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了c#分页读取GB文本文件的方法。分享给大家供大家参考。具体如下: 一、应用场景: ① .我在做BI开发测试的时候,有可能面对source文件数GB的情况,如果使用一般的文本编辑器,则会卡死,或要等很久才能显示出来。 ② .有时候,我们使用ascii(01)或asci

  • 本文向大家介绍C#读取二进制文件方法分析,包括了C#读取二进制文件方法分析的使用技巧和注意事项,需要的朋友参考一下 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧还有大量的文件格式不是XML,甚至也不是ASCII。二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递。相比之下,在处理

  • 我目前正在做一个非常非常重要的学校项目。我需要在C/C中提取WAVE文件的信息,并使用这些信息来获取语音信号的LPC。但是,为了做到这一点,我需要对信号进行一些预处理,例如进行过零和能量分析等。这意味着我需要符号和真实值。问题是我不知道如何获得有用的信息和正确的格式。我已经阅读了文件中的每个字段,但我不确定我做得对不对。请提出建议? 这是我目前读取文件的方式: =fread( 提前谢谢。