我无法接受来自文本文件的输入.我的程序应该读入用户指定的字符串,并且该字符串的长度是在运行时确定的.当用户运行程序(手动输入值)时它工作正常,但是当我运行我的老师的文本文件时,它会遇到无限循环.
对于这个例子,当我接收4个字符并且他的文件中的输入是"ABCDy"时,它失败了."ABCD"是我应该阅读的内容,而'y'应该在以后用来知道我应该重新启动游戏.相反,当我使用scanf读入"ABCD"时,它也会读入'y'.有没有办法绕过这个使用scanf,假设我不知道字符串应该运行多久?
Jer*_*fin 15
通常情况下,你会使用类似"%4c"或"%4s"最多读取4个字符的东西(不同之处在于"%4c"读取接下来的4个字符,而"%4s"不是跳过前导空格,如果有空格则停在空白处).
但是,要在运行时指定长度,您必须更加棘手,因为您不能使用嵌入了"4"的字符串文字.一种替代方法是使用sprintf创建您将传递给的字符串scanf:
char buffer[128];
sprintf(buffer, "%%%dc", max_length);
scanf(buffer, your_string);
Run Code Online (Sandbox Code Playgroud)
我应该添加:printf您可以通过*在格式字符串中放置一个星号()并在适当的位置传递一个变量来指定宽度/精度来动态指定字段的宽度或精度:
int width = 10;
int precision = 7;
double value = 12.345678910;
printf("%*.*f", width, precision, value);
Run Code Online (Sandbox Code Playgroud)
鉴于printf和scanf格式字符串是非常相似的,人们可能会认为同样会一起工作scanf.不幸的是,情况并非如此 - scanf转换规范中的星号表示应扫描但未转换的值.也就是说,输入中必须存在的东西,但它的值不会放在任何变量中.