问题标签 [scanf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
605 浏览

ocaml - OCaml 中这三个 fscanf 调用有什么区别?

我写了一小段代码来简单地跳过num_lines输入文件中的行(出于调试目的将行打印出来。这是我尝试过的两件事没有奏效:

但这确实有效:

我一直在尝试理解 fscanf 上的文档,但似乎并没有深入了解。有人可以向我解释为什么最后一个片段有效,但前两个片段没有?

0 投票
10 回答
19975 浏览

c - Scanf 在 C 中每隔一个 while 循环跳过

我正在尝试开发一个简单的基于文本的刽子手游戏,主游戏循环以提示输入每个字母的猜测开始,然后继续检查该字母是否在单词中,如果是则结束生命不是。但是,当我运行游戏时,每次都会出现两次提示,并且程序不会等待用户输入。它还夺走了一条生命(如果输入正确,则一条生命,如果不是,则两条生命),因此无论它接受什么都与先前的输入不同。这是我的游戏循环,稍微简化了一点:

我认为问题是 scanf 认为它在没有的情况下吸收了一些东西,但我不知道为什么。有谁有想法吗?我在 Mac OS X 10.5 上使用 gcc 4.0.1。

0 投票
3 回答
15232 浏览

c - 如何确保输入在 C 编程语言中是双精度的

我如何确保我有一个双倍而不是别的东西?

0 投票
5 回答
9315 浏览

c - 验证 scanf 中的最大整数

我想从标准输入读取一个 int,但我想验证用户是否超过了 int 最大值。我该怎么做?

scanf 读取十进制输入并存储在 int 中,导致溢出。我该如何检查和避免这种情况?

0 投票
7 回答
2253 浏览

c - 从C中的文件中检索带有空格的字符串

我们被分配了一项任务,涉及从文件中获取信息并将数据存储在数组中。文件中的数据排序如下

前 20 个字符是城市名称,后跟纬度和经度。纬度和经度应该很容易用一些

fscanf(infile, "%d(%c取决于我得到哪一个)", pointer)

操作,因此它们不会成为问题。

我的问题是我不知道如何收集城市名称的字符串,因为一些城市名称有空格。我读了一些关于使用分隔符的内容,但从我读到的内容来看,它似乎更多地用于阅读整行。有没有办法从文件中读取城市名称并将整个名称与空格一起存储在字符数组中?谢谢。

0 投票
16 回答
65537 浏览

c - 为什么 scanf() 在此代码中导致无限循环?

我有一个小的 C 程序,它只从标准输入读取数字,每个循环周期一个。如果用户输入了一些 NaN,则应将错误打印到控制台并再次返回输入提示。在输入“0”时,循环应该结束,给定的正/负值的数量应该打印到控制台。这是程序:

我的问题是,在输入一些非数字(如“a”)时,这会导致无限循环一遍又一遍地写入“-> Err ...”。我想这是一个 scanf() 问题,我知道这个函数可以被一个更安全的函数替换,但这个例子是为初学者准备的,只知道 printf/scanf、if-else 和循环。

我已经阅读了这个问题的答案,scanf()跳过了 C 中的所有其他while循环并浏览了其他问题,但没有什么能真正回答这个具体问题。

0 投票
4 回答
16297 浏览

c - scanf("%8s", string) 溢出?

我知道普通代码有可能溢出:

字符字符串[9];

scanf("%s", 字符串)。

但是是否有可能溢出 scanf("%8s", string)?8只是一个例子。

我知道“%8s”就像一个分隔符,但我也注意到当我输入超过 8 个字符的字符串时,程序将因以下原因终止:

* 检测到堆栈粉碎 * : ./a.out 终止

======= 回溯:=========

...

显然,默认情况下,有一个标志可以检测 GCC 打开的堆栈粉碎。既然这是一个堆栈粉碎,那么我的猜测是仍然有可能溢出并执行任意代码。

与破坏 scanf("%s") 调用者的正常溢出相反,如果 scanf("%8s") 可以溢出,它将在 scanf 函数内溢出,以便当 scanf 尝试返回时,获得控制权。

但是 scanf 是一个需要模式切换(从用户模式切换到内核模式)的系统调用,并且在内部它会调用诸如读取到标准输入等的东西。所以不确定我们是否可以在内核模式下溢出或其他东西..

欢迎评论!!

更新>>

char string[9] 假设在上面的例子中。以下实际代码中的 char string[8]。

问题实际上是关于安全 scanf("%8s") 和由于堆栈粉碎导致的 GCC 中止之间看似矛盾的故事。

简化代码:

笔记:

  1. foo 被其他人调用。
  2. 尽管字符串在带有“%8s”的实际代码中是 8 个字节,但我认为这不会导致崩溃。
0 投票
1 回答
2141 浏览

c - scanf() 是否将 '\n' 作为先前 scanf() 的剩余输入?

在以下 C 代码中:

是否在第 1 次迭代结束时scanf读取输入的第 2 次迭代输入?'\n'scanf()

0 投票
3 回答
131 浏览

c - 从多维数组中提取时序并写入 c 中的文件

我无法从.srt(字幕)文件中提取时间并将其写入另一个名为 output.srt 的文件。当我运行以下命令时,我会在输出文件中写入一些时髦的东西。

// 其中 hr=hours,mn=minutes,sc=seconds,ms=mili seconds

我该如何提取前 10 个时间?

0 投票
5 回答
913 浏览

c - 有没有比我用 C 读取格式化文件更有效的方法?

我需要读取一个看起来像这样的格式化文件。

代码:HARK

姓名:奥斯卡

MRTE:火车

ETC

目前我的代码看起来像这样。

这种方法对我有用,但我不认为为文本文件中的每一行编写三个 fscanf() 是最好的方法,特别是因为我稍后将在循环中这样做。

我试着这样做:

然而,当我尝试打印输出时,这给了我奇怪的符号。