【发布时间】:2019-07-24 09:29:21
【问题描述】:
整个问题的简短版本:
我想加载这个输入
4
CAAC
28 EAAEB5
F489AD95
但我能从中得到的只有:
4
我正在尝试从该输入中生成这些参数:4CAAC28EAAEB5F489AD95
--------------- 用我的代码详细解释 ---------------
我是 C 语言的新手,我正在尝试输入,作为字符串并在之后使用它......我在处理 "Whitespaces" 时遇到问题,例如 [ "\n" ,@987654331 @ 和 " " ] 这是我给编译器的输入:
4
CAAC
28 EAAEB5
F489AD95
有一堆空格,制表符等。我想做的事情是阅读它并替换 \n 和 \t (在下面的 clode 中我试图忽略它,因为在 scanf() 找到 \ n 它会跳过其余部分。
这是我目前尝试的代码之一:
#include <stdio.h>
int main()
{
int number;
char chr[200];
// %d -> I know that there should be number at the beginning, so until character / space appears, I want to read the number.
// scanf("%d", &number);
// ignores \n and \t and then puts it in chr
scanf(" %[^\t\n]s", &chr);
// last should be \n so this is just acheck if there is ( its gonna be in if later )
scanf("%c");
printf("\n %s", chr);
printf("\n Heythere");
return 0;
}
这是我得到的输出:
4
Heythere
我一直在考虑把它放在一个循环中,但问题是,最后一个字符是“\n”,它可以在给定的字符串中出现多次。
我目前正在尝试为 scanf() 找到读取这些行并忽略新行的最佳选项
/////////
换句话说:
我正在尝试从该输入中生成这些参数:4CAAC28EAAEB5F489AD95
知道如何修复它,以便能够完全缓冲它吗? (也是对我有帮助的最佳答案,它将用一个“”(空格)替换那些“\n”和“\t”(空格)提前谢谢您的回答(如果它真的很简单,也很抱歉并回答百万次......我被困在这里一周)
【问题讨论】:
-
scanf(" %[^\t\n]s", &chr);是类型错误。此外,格式字符串中的s永远不会匹配。这也是等待发生的缓冲区溢出。scanf("%c");具有未定义的行为(%c缺少参数)。 -
好的,所以在我修复 scanf("%c"); ,我应该如何修复 scanf(" %[^\t\n]s", &chr); ?
-
我不知道,我得看看
scanf手册,我讨厌scanf,所以我通常不会打扰。 -
这是X-Y problem吗?您是否真的在尝试读取
4、CAAC、28、EAAEB5和F489AD95五个数据项而不使用任何分隔空格? -
我将编辑我的问题,使其更具可读性和易于理解