我无法接受来自文本文件的输入。我的程序应该读取用户指定的字符串,并且该字符串的长度在运行时确定。当用户运行程序(手动输入值)时它工作正常,但是当我运行我老师的文本文件时,它会进入无限循环。
对于这个例子,当我输入 4 个字符并且他在他的文件中输入的是“ABCDy”时失败。 “ABCD”是我应该读入的内容,“y”应该在稍后使用以知道我应该重新开始游戏。相反,当我使用 scanf 读取“ABCD”时,它也会读取“y”。有没有办法使用 scanf 来解决这个问题,假设我在运行时之前不知道字符串应该有多长?
最佳答案
通常,您会使用类似"%4c"
或"%4s"
的内容来读取最多 4 个字符(不同之处在于 "%4c"
无论如何都会读取接下来的 4 个字符,而 "%4s"
会跳过前导空格并在有空格时停止)。
但是,要在运行时指定长度,您必须稍微有点技巧,因为您不能使用嵌入了“4”的字符串文字。一种替代方法是使用 sprintf
创建要传递给 scanf
的字符串:
char buffer[128];
sprintf(buffer, "%%%dc", max_length);
scanf(buffer, your_string);
我应该补充一点:使用 printf
,您可以通过在格式字符串中放置星号 (*
) 并传递一个来动态指定字段的宽度或精度适当位置的变量以指定宽度/精度:
int width = 10;
int precision = 7;
double value = 12.345678910;
printf("%*.*f", width, precision, value);
考虑到 printf
和 scanf
格式字符串非常相似,人们可能会认为同样适用于 scanf
。不幸的是,情况并非如此——对于 scanf
,转换规范中的星号表示应扫描但不转换的值。也就是说,某些东西必须出现在输入中,但它的值不会放在任何变量中。
关于c - 使用 scanf 读取 C 中一定数量的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545416/