【发布时间】:2021-10-26 21:07:55
【问题描述】:
我一直在全球搜寻 scanf() 不捕获空格的原因,而通常的解决方案,例如 "%[^\n]s" 或 "%100s"(设置足够大的字符串以捕获输入)都不起作用。
我的程序的总体目标是提示用户输入一个字符串,然后将该字符串存储在一个 .txt 文件中。我不认为我的问题是由 fprintf() 引起的,而是来自初始控制台扫描。
是的,我是初学者,不了解 C 语言的细微差别。对于看似简单的句法错误,我深表歉意。这是我得到的。
#include <stdio.h>
int main()
{
errno_t inputfile;
FILE *stream;
inputfile = fopen_s(&stream, "inputfile.txt", "w");
printf("%s", "Enter a string. Press ENTER to exit\n");
char c[100];
scanf("%[^\n]s", c);
printf("%100s", c); //using printf() to check if scanf() worked.
//Messing around with specifier to see if problem
//is in printf(), which doesn't seem to be the case.
fprintf(stream, "%s", c);
fprintf(stream, "%s", "ENTER is a correct ending");
fclose(stream);
return 0;
}
感谢任何帮助。
【问题讨论】:
-
我是初学者,不懂c++的细微差别。上面的代码是干净的C。
-
您的代码没有任何明显错误。我试过了,效果很好。
"%[^\n]s"中的s是错误的,但这不会导致任何问题。printf("%100s"中的100很奇怪,可能会导致输出以一种奇怪的方式出现在您的屏幕上。尝试将 printf 格式字符串更改为"%s\n"。 -
用
scanf("%99[^\n]", c);代替scanf("%[^\n]s", c);(省略's'并添加最大字段宽度。) -
由于没有人费心链接任何文档,read this。特别注意集合符号
[...]与%s字符串格式说明符。它们不是连接的。使用其中一种。这是 C 新手难以置信常见的错误,我继续想知道哪些在线资源/教程等显示了这种错误形式。 -
另外,
%[...]属于“高级scanf使用”的范畴,而“高级scanf使用”有点像“高级三轮车骑行”。scanf是一个玩具功能,仅对最基本的介绍性程序有用。当你准备好做一些更高级的事情时(比如,“读取可能包含空格的字符串”),是时候离开使用scanf并学习如何使用 use something better。