为什么 gets(stdin) 返回一个整数?以及其他错误[重复]

2024-02-07

我是 C 编程新手(尽管我有 Java 经验)。阅读了一些教程后,我决定开始解决编码挑战编码字节 https://www.coderbyte.com.

我尝试的第一个挑战是this one https://www.coderbyte.com/editor/guest:First%20Factorial:C:

挑战

有功能第一个阶乘(数字)采取num传递参数并返回其阶乘。例如:如果num= 4,那么你的程序应该返回(4*3*2*1)= 24。对于测试用例,范围将在 1 到 18 之间,并且输入始终为整数。

示例测试用例

Input: 4
输出:24

Input: 8
输出:40320

我的解决方案:

#include <stdio.h>

void FirstFactorial(int num[]) {

  int i = num -1;

  for(i ; i > 0; i--) {
    num = num * i;
    printf("%d",i);
  }

  printf("\t %d", num);
}

int main(void) {

  // disable stdout buffering
  setvbuf(stdout, NULL, _IONBF, 0);

  // keep this function call here
  FirstFactorial(gets(stdin));
  return 0;

}

输入参数的值:8

错误信息:

main.c: In function 'FirstFactorial':
main.c:5:11: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
   int i = num -1;
           ^~~
main.c:8:15: error: invalid operands to binary * (have 'int *' and 'int')
     num = num * i;
               ^
main.c: In function 'main':
main.c:23:18: warning: passing argument 1 of 'FirstFactorial' makes pointer from integer without a cast [-Wint-conversion]
   FirstFactorial(8);
                  ^
main.c:3:6: note: expected 'int *' but argument is of type 'int'
 void FirstFactorial(int num[]) {
      ^~~~~~~~~~~~~~

exit status 1

所以似乎有一些问题,我有几个问题:

  1. 我从没听说过gets(stdin)。我抬头gets() https://www.gnu.org/software/libc/manual/html_node/Line-Input.html#index-gets,并且 glibc 文档说该函数返回一个char*。我怎样才能将它传递给一个需要int?

  2. 看起来像

    int i = num -1;
    

    正在初始化i为 4 而不是 7。为什么?

  3. for循环似乎是递减的i正确(i= 7, 6, 5, 4, 3, 2, 1)。但这个声明:

    num = num * i;
    

    正在产生错误。这有什么问题吗?它看起来就像一个普通的乘法。


为了未来的访客:

这是对 Coderbytes 为了“方便”而使用的语言的可怕滥用。gets(stdin)首先就不应该起作用:类型不起作用。

实际发生的事情是Coderbytes 正在盲目地寻找并替换第一个实例gets(stdin)使用您作为输入提供的文字字符串,然后将代码发送给编译器。这甚至不是一个预处理器宏,它是对源代码的盲目替换。

因此,虽然您在现实中永远不应该这样做,但在 Coderbytes 上,这是一种不可避免的罪恶:这似乎是唯一受支持的将输入输入到程序中的方式。

Source https://stackoverflow.com/a/55269670/3233017


另外,如果您想要一些娱乐,请尝试清除其他所有内容并将其放入 Coderbytes 中:

int main(){
    printf("%s", "This is a literal string containing gets(stdin) along with other words");
}

您会发现即使在字符串文字内部也会发生替换!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 gets(stdin) 返回一个整数?以及其他错误[重复] 的相关文章

  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 'iter' 的名称查找已更改为新的 ISO 'for' 范围

    我正在尝试编译下面的两个文件 但从编译器收到错误消息 gcc 4 3 3 Linux 错误位于带有以下符号的行 LINE WITH ERROR 我做错了什么 我该怎么改变 路易斯 g c b h b cpp b cpp In functio
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • 展开 std::reference_wrapper 的成本

    Given include
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s

随机推荐

  • Visual Studio 2017 RC 安装错误“指定的帐户已存在。”

    当我尝试安装 Visual Studio 2017 RC 时 出现此错误 1764 001d 2016 11 20T10 14 21 Package Microsoft Ancm IISExpress Msi version 1 0 196
  • Numba JIT 比带有参数化函数的纯 Python 慢

    我刚刚写了一个简单的基准 https www matecdev com posts julia python numba cython html比较 Numba 和 Julia 并进行一些讨论 我想知道我的 Numba 代码是否可以以某种方
  • 如何以编程方式将项目添加到 arrayList 中的字符串数组?

    这是我的数组 xml文件在分辨率 值 folder
  • Jquery Draggable 具有多个句柄

    是否有可能有一个draggable具有多个句柄的元素 我初始化它两次 每次都使用不同的句柄参数 但它不起作用 只有第一个起作用 您应该只传递 handle 参数一次 它可以是选择器或元素 因此 要使其与多个句柄一起使用 elem dragg
  • 编写字体查看器 - 获取字体属性,动态加载 ttf

    我正在尝试使用 VB6 VB5 代码 在 Windows 下 为 TrueType OpenType 字体编写一个字体查看器 这是令人惊讶的困难 1 在VB winAPI中 我没有找到如何提取字体的名称或一般的字体属性 2 我可以安装字体
  • preg_match_all 和引号内的换行符

    另一个菜鸟正则表达式问题 问题 我可能做了一些愚蠢的事情 所以我想我应该利用 SO 常客的聪明才智 尝试匹配换行符 但前提是它们出现在双引号或单引号内 我还想捕获引号之间但不包含换行符的字符串 好的 这就是我得到的 有输出 下面是我想要得到
  • 在 Eclipse Maven 项目中找不到 persistence.xml

    我无法修复persistence xml file not foundeclipse问题 这是一个简单的测试项目 Maven Nature 用于非常基本的EJB测试 该文件确实在src main resources META INF 这是p
  • 应用程序开发人员犯的数据库开发错误[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么Java 8中没有BooleanConsumer?

    恐怕这是一个有点愚蠢的问题 有没有人可以告诉我为什么没有BooleanConsumer与相反BooleanSupplier https docs oracle com javase 8 docs api java util function
  • 获取泛型参数的类型

    我编写了一个小函数来更好地处理类型 function evaluate variable any type string any switch type case string return String variable case num
  • 如何在Java中创建临时目录/文件夹?

    是否有一种标准且可靠的方法在 Java 应用程序中创建临时目录 有Java 问题数据库中的一个条目 http bugs java com bugdatabase view bug do bug id 4735419 其中的注释中有一些代码
  • 如何将 pandas 数据添加到现有 csv 文件?

    我想知道是否可以使用 pandasto csv 函数将数据框添加到现有 csv 文件 csv 文件与加载的数据具有相同的结构 您可以在 pandas 中指定 python 写入模式to csv http pandas pydata org
  • Scala 何时需要分号

    我在工作中被锁定的电脑困住了 但我正在尝试练习我的 Scala 我正在使用 Ideone com 因为我什至无法安装scalac 无论如何 这不能编译 class DPt var name String var x Double var y
  • 如何在Lucene文档中定义主键字段以获得最佳的查找性能?

    在我的 Lucene 索引 v7 2 中创建文档时 我添加了uid包含唯一 id key 字符串 的字段 doc add new StringField uid uid Field Store YES 为了稍后检索该文档 我为给定的唯一 I
  • 模板中的 django 请求

    我已经启用了 Django 请求处理器 TEMPLATE PROCESSORS django core context processors auth django core context processors debug django
  • 一些 Alt 键会更改我的 RichTextBox 字体

    我正在 Windows 窗体中创建一些印地语打字应用程序 我用过KrutiDev010字体 某些字符有一些 Alt 键控制代码 但如果我输入其他一些 Alt 键控制代码 例如Alt 0261 Alt 025896然后它打印一个章程 攨分别并
  • XSL 文档的仅 IE7 样式表

    如何将仅限 IE7 及更低版本的样式表添加到 XSL 页面 我尝试将其添加到标题信息模板中 如下所示
  • Meteor、Ember.js 和 Backbone.js 之间的主要区别是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android应用程序中的模块间(库项目)通信

    在下图中 我有 3 个模块 作为 android 库 它们扩展了基本的 通用组件模块 并且所有这 3 个模块都将添加到单个 android 应用程序中 所有3个模块都是独立的模块 但是当它作为一个应用程序时 它需要共享一些数据 启动其他模块
  • 为什么 gets(stdin) 返回一个整数?以及其他错误[重复]

    这个问题在这里已经有答案了 我是 C 编程新手 尽管我有 Java 经验 阅读了一些教程后 我决定开始解决编码挑战编码字节 https www coderbyte com 我尝试的第一个挑战是this one https www coder