2013-04-08 69 views
0

当我尝试使用fscanf读取包含 PIZZA CHIPS BURGERS作为其中一行的文本文件时。我试图将它们添加到一个变量,但是一次只需要一个字母。fscanf问题,花费一个时间

if (infile) { 
    while (fscanf(infile, "%c", &cit) > 0) { 
     printf("%c\n",cit); 

如何让PIZZA代替P I Z Z A?

+4

我的意思不是粗鲁,但不要使用'%c'。使用'“%s”'作为单个字符串。 – squiguy 2013-04-08 05:49:14

+0

您应该详细了解'scanf'及其格式代码。在''%c''中,'c'表示“字符”,即它一次读取一个字符。如果你想读一整行,你应该使用['fgets'](http://en.cppreference.com/w/c/io/fgets)。 – 2013-04-08 05:59:41

+1

@JoachimPileborg:例如,您可以使用'%255c',并且不管空格,换行符等,它都将读取255个字符(不会跳过前导空格)加终端null。授予,'% c'等同于'%1c',而'%s'的默认值是无限个字符(并且它跳过前导空格,并且在前导空格之后的第一个空白处停止)。所以,是的,你通常使用'%c'格式,并且它读取单个字符,但它不是唯一的方式来使用它。 – 2013-04-08 06:03:55

回答

0
char word[256]; 

if (infile) 
{ 
    while (fscanf(infile, "%255s", word) == 1) 
     printf("Word: %s\n", word); 
} 

需要注意的是,如果你想一整行的时间,空间和所有的阅读,那么你会使用fgets()

char line[4096]; 

if (infile) 
{ 
    while (fgets(line, sizeof(line), infile) != 0) 
     printf("Line: %s", line); 
} 

NB:fgets()保持换行符,除非道线条都是如此因为它必须被截断,所以printf()格式不需要自己的换行符。通常,如果您使用fgets()sscanf(),那么控制输入比仅使用scanf()fscanf()更容易。特别是,您通常可以提供更好的错误诊断,因为您拥有所有用户输入的内容。如果有必要,您还可以尝试其他格式。