使用scanf读取C中的一定数量的字符?

时间:2010-12-09 23:53:32

标签: c string scanf

我无法接受来自文本文件的输入。我的程序应该读入用户指定的字符串,并且该字符串的长度是在运行时确定的。当用户运行程序(手动输入值)时,它工作正常,但是当我运行教师的文本文件时,它会进入无限循环。

对于这个例子,当我输入4个字符并且他的文件中的输入是“ABCDy”时,它失败了。 “ABCD”是我应该阅读的内容,而'y'应该在以后用来知道我应该重新启动游戏。相反,当我使用scanf读入“ABCD”时,它也会读入'y'。有没有办法绕过这个使用scanf,假设我不知道字符串应该运行多长时间?

4 个答案:

答案 0 :(得分:15)

通常情况下,您使用"%4c""%4s"之类的内容最多可以读取4个字符(不同之处在于,"%4c"会读取接下来的4个字符,而"%4s"则会sprintf 1}}跳过前导空格,如果有空格则停在空白处。

但是,要在运行时指定长度,您必须更加棘手,因为您不能使用嵌入了“4”的字符串文字。另一种方法是使用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

鉴于scanfscanf格式字符串非常相似,人们可能会认为同样适用于scanf。不幸的是,情况并非如此 - 转换规范中的{{1}}星号表示应扫描但未转换的值。也就是说,输入中必须存在的东西,但它的值不会放在任何变量中。

答案 1 :(得分:0)

尝试

scanf("%4s", str)

答案 2 :(得分:0)

您也可以使用fread,您可以在其中设置读取限制:

char string[5]={0};
if( fread(string,(sizeof string)-1,1,stdin) )
  printf("\nfull readed: %s",string);
else
  puts("error");

答案 3 :(得分:-1)

您可以考虑简单地循环调用getc()