【问题标题】:C - One of my Variables not calculating and or loading correctlyC - 我的一个变量没有正确计算和/或加载
【发布时间】:2022-10-15 10:56:19
【问题描述】:

代码已被编辑,因此其他从事 CS50 的人不能使用它来作弊和/或复制。

通过测试我的代码 S = 0.000 无论输入什么。 return sent 返回正确数量的句子,但当 I S = sent / words *100;它似乎没有使用正确发送的返回加载,我已经将脸撞到键盘上一个小时试图找出原因。除此之外,我已经完成了。

【问题讨论】:

  • OT:最后的grade 是一个整数......很好......但是如果(整数)等级等于1或16,打印结果的条件特别排除打印任何东西......这是故意的吗? (你必须测试极端情况,或者像编译器一样学习阅读代码......)

标签: c variables floating-point integer-arithmetic


【解决方案1】:

在您的代码中

 S = sent / words * 100;

将执行整数运算,因为所有涉及的操作数都是int。如果您需要浮点运算,则需要强制执行它。就像是

 S = sent / (float) words * 100;

其他陈述也是如此。

【讨论】:

  • 试图在几个不同的地方添加(浮动),现在我的最终结果都是负数。
  • 结果在我尝试的示例中它应该是负面的。所以最后一条评论实际上是按预期工作的。
【解决方案2】:

对于初学者,无需在文件范围内声明变量 SL

//preload variables.
float S, L;

一般来说,这是一个坏主意。在使用它们的最小范围内声明变量。所以你应该在main 中声明变量SL

您两次声明函数get_words

int get_sent(string text);
int get_words(string text);
int get_letter(string text);
int get_words(string text);

尽管它不会产生编译器错误,但它可能会使代码的读者感到困惑。所以删除一个声明。

函数strlen 的返回类型为size_t。一般来说,有符号类型int 不足以存储字符串的长度。所以你的函数应该有无符号类型size_t作为返回类型。

size_t get_sent(string text);
size_t get_words(string text);
size_t get_letters(string text);

在函数的循环内调用函数strlen 是多余且低效的。

例如应该重命名为get_letters的函数get_letter类似于名称get_words可以如下所示

size_t get_letters(string text)
{
    size_t letters = 0;

    // count the letter in the string from user and count 
    // only upper and lowercase letters all = 1 "point" per letter.

    for ( ; *text != '
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2011-12-09
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多