整个问题的简短版本:
我要加载此输入
4
CAAC
28 EAAEB5
F489AD95
但是我能从中得到的是:
4
我正在尝试从输入中得出以下参数:4
CAAC
28
EAAEB5
F489AD95
---------------我的代码的详细说明---------------------------
我是C语言的新手,我正在尝试进行输入,以字符串形式输入并在...之后使用它。我在处理"Whitespaces"
时遇到问题,例如[{{1} },"\n"
和"\t"
]这是我给编译器的输入:
" "
有一堆空格,制表符等。我想做的是读取它,并替换\ n和\ t(在clode波纹管箱中,我试图忽略它,因为在scanf()找到后就\ n跳过其余部分。
这是我现在尝试的代码之一:
4
CAAC
28 EAAEB5
F489AD95
这是我得到的输出:
#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;
}
我一直在考虑将其放入循环中,但是问题是,最后一个字符是“ \ n”,并且在给定的字符串中它可能出现多次。
我目前正在尝试为scanf()找到最佳选择,以读取这些行并忽略新行
/////////
换句话说:
我正在尝试从输入中得出以下参数:4
Heythere
4
CAAC
28
EAAEB5
任何想法如何解决它,以便能够完全缓冲它? (也是对我有帮助的最佳答案,它将是一个,它将用一个单一的“”(空格)代替那些“ \ n”和“ \ t”)预先感谢您的回答(如果真的很简单,也深感抱歉。并回答百万次...我被困在这里一周了)
答案 0 :(得分:3)
答案 1 :(得分:1)
表面上,您只需要一个循环即可读取五个字符串:
TimeOut 600
现在,数组的元素将包含您提供的5个字符串(“单词”)。
根据设计,scanf()
函数在很大程度上将空格忽略,除非它分隔字符串或数字。除三个转换说明符外,所有转换说明符都跳过前导空格-char data[5][100];
int i;
for (i = 0; i < 5; i++)
{
if (scanf("%99s", data[i]) != 1)
{
fprintf(stderr, "Unexpected input failure (i = %d)\n", i);
exit(EXIT_FAILURE);
}
}
,%c
(扫描集)和%[…]
除外。
%n
转换规范会跳过前导空格(空格,制表符,换行符),最多消耗99个非空格字符,并在第一个空格处停止(或当字符串已满时) ,如果字符串不完整,则将输入流中的空白留给下一个输入处理。
很明显,如果您不知道有五个要读取的字符串,则必须加倍努力-但基本思想是相同的。
如果要保留或更改换行符,制表符,空格,则%99s
不是该作业的正确工具。它不在乎空白,而您却在乎-不会带来幸福。然后,您使用fgets()
或POSIX getline()
来读取输入行,然后可以根据需要处理空白,制表符和换行符。