在C语言中使用scanf
我的问题似乎很简单,但我在谷歌上找不到答案 我想知道while(fscanf(infle,“%[^\n]”,string)!=EOF)的作用是什么。我正试图使用上面的方法从文件中读取字符串 但是,我不能确切地确定此语句的作用,特别是在C语言中使用scanf,c,string,file,while-loop,scanf,C,String,File,While Loop,Scanf,我的问题似乎很简单,但我在谷歌上找不到答案 我想知道while(fscanf(infle,“%[^\n]”,string)!=EOF)的作用是什么。我正试图使用上面的方法从文件中读取字符串 但是,我不能确切地确定此语句的作用,特别是%[^\n]部分。我知道它将循环到文件的末尾,但“string”是一个数值还是其他值?还有,我如何使用它 例如,对于一个句子“我喜欢树”,字符串值等于什么 感谢您的支持。%[^\n]告诉fscanf读取所有字符,不包括\n和空格%[^\n]告诉fscanf读取所有字符
%[^\n]
部分。我知道它将循环到文件的末尾,但“string”是一个数值还是其他值?还有,我如何使用它
例如,对于一个句子“我喜欢树”,字符串值等于什么
感谢您的支持。
%[^\n]
告诉fscanf
读取所有字符,不包括\n
和空格%[^\n]
告诉fscanf
读取所有字符,不包括\n
和空格
“%[^\n]”
基本上它匹配所有东西,除了\n
或''
字符
您使用的fscanf
语句将读取infle
指向的文件中的所有内容,然后将读取的内容存储到名为string
的字符串中,该字符串应声明为char string[500]
(或类似的足够大的值)。每次它成功读取一个字符时,它都会返回该字符
现在,由于您需要一种方法使while
循环在读取文件后退出,因此您正在将fscanf
的返回值与EOF
进行比较,后者是特殊的文件结尾字符
编辑:已更正常量字符*
“%[^\n]”
基本上它匹配所有内容,除了\n
或'
字符
您使用的fscanf
语句将读取infle
指向的文件中的所有内容,然后将读取的内容存储到名为string
的字符串中,该字符串应声明为char string[500]
(或类似的足够大的值)。每次它成功读取一个字符时,它都会返回该字符
现在,由于您需要一种方法使while
循环在读取文件后退出,因此您正在将fscanf
的返回值与EOF
进行比较,后者是特殊的文件结尾字符
编辑:已更正常量字符*
注意插入符号^
后的空格以及fscanf
格式字符串“%[^\n]”
中的尾随空格
fscanf(inFile, "%[^ \n] ", string)
上面的语句意味着fscanf
将从流infle
中读取并匹配任何不包含空格'
或换行符'\n'
的非空字符序列,并将它们写入下一个参数string
指向的缓冲区指针中,然后读取并丢弃任意数量(包括零)的空白字符(指格式字符串中的尾随空格)。string
指向的缓冲区必须足够大,可以容纳任何这样的字符序列加上自动添加的终止空字节。如果缓冲区不够大,则fscanf
将调用未定义的行为使其溢出,很可能导致程序因segfault而崩溃。您必须通过指定最大字段宽度来防止这种情况,该宽度应小于缓冲区的长度,以容纳终止的空字节
fscanf
返回成功匹配和分配的输入项目总数,在本例中为一个。当到达流infle
中的文件结尾时,它将返回EOF
。因此,while
循环条件意味着,fscanf
将读取这样的字符序列,并将其写入缓冲区字符串
,直到到达流infle
中的文件结尾
您应该将while
循环更改为-
// assuming string is a char array
char string[100];
while(fscanf(inFile, "%99[^ \n] ", string) == 1) {
// return value 1 of fscanf means fscanf call was successful
// do stuff with string
}
请注意插入符号^
后的空格和格式字符串“%[^\n]”
中的尾随空格
fscanf(inFile, "%[^ \n] ", string)
上面的语句意味着fscanf
将从流infle
中读取并匹配任何不包含空格'
或换行符'\n'
的非空字符序列,并将它们写入下一个参数string
指向的缓冲区指针中,然后读取并丢弃任意数量(包括零)的空白字符(指格式字符串中的尾随空格)。string
指向的缓冲区必须足够大,可以容纳任何这样的字符序列加上自动添加的终止空字节。如果缓冲区不够大,则fscanf
将调用未定义的行为使其溢出,很可能导致程序因segfault而崩溃。您必须通过指定最大字段宽度来防止这种情况,该宽度应小于缓冲区的长度,以容纳终止的空字节
fscanf
返回成功匹配和分配的输入项目总数,在本例中为一个。当到达流infle
中的文件结尾时,它将返回EOF
。因此,while
循环条件意味着,fscanf
将读取这样的字符序列,并将其写入缓冲区字符串
,直到到达流infle
中的文件结尾
您应该将while
循环更改为-
// assuming string is a char array
char string[100];
while(fscanf(inFile, "%99[^ \n] ", string) == 1) {
// return value 1 of fscanf means fscanf call was successful
// do stuff with string
}
while(fscanf(infle,“%[^\n]”,string)!=EOF)
有很大的问题
格式字符串“%[^\n]”
由两条指令组成:“%[^\n]”
和“
”
“%[^\n]”
是由扫描集组成的格式说明符。扫描集由除'
和'\n'
之外的所有字符组成。因此fscanf()
查找扫描集中的一个或多个字符并保存