Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件中读取特定行的C程序_C_File - Fatal编程技术网

从文件中读取特定行的C程序

从文件中读取特定行的C程序,c,file,C,File,我正在尝试制作一个程序,该程序将对文件中的行进行计数,并将特定行作为另一个计数引用(即以#开头的行不应计数) 现在我做错了什么 我还注意到,第一次调用fgets时,我得到了∩作为tempstring[0]的输出,这是为什么?您的条件始终为真-您想使用&&,或者否定整个|: if (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ') 或 这是等效的。请注意,如果,您可以同时删除,因为

我正在尝试制作一个程序,该程序将对文件中的行进行计数,并将特定行作为另一个计数引用(即以#开头的行不应计数)

现在我做错了什么


我还注意到,第一次调用fgets时,我得到了
作为
tempstring[0]
的输出,这是为什么?

您的条件始终为真-您想使用
&&
,或者否定整个
|

if (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ')

这是等效的。请注意,如果,您可以同时删除
,因为C中的
true
1
相同:

count += (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ');

还要注意,
fgets
可能会也可能不会给出行的开头,这取决于
sizeof(tempstring)
。如果
tempstring
的长度不足以容纳文件中的整个字符串,则您的调用可能会从另一个字符串的中间生成一个字符串,从而导致错误行为。这更难修复,因为现在您需要一个循环来检查从
fgets
返回的字符串的最后一个字符是否为
'\n'

您的条件始终为真-您想要使用
&
,或者否定整个
|

if (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ')

这是等效的。请注意,如果
,您可以同时删除
,因为C中的
true
1
相同:

count += (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ');

还要注意,
fgets
可能会也可能不会给出行的开头,这取决于
sizeof(tempstring)
。如果
tempstring
的长度不足以容纳文件中的整个字符串,则您的调用可能会从另一个字符串的中间生成一个字符串,从而导致错误行为。这更难修复,因为现在需要一个循环来检查从
fgets
返回的字符串的最后一个字符是否为
'\n'

tempstring[0]!='#'|tempstring[0]!='\n'| | tempstring[0]!=''
总是正确的。请注意,
fgets
可能看不到完整的一行。这就是为什么首先在纸上计划代码是有帮助的,尤其是当你是新手时。请养成这样做的习惯。随着时间的推移,你会变得更好,并且能够在你的头脑中做到这一点,但尝试从头开始编写代码就像尝试驾驶一架没有使用操纵杆经验的战斗机一样。您可以从现在的位置开始从头开始编写代码,但您需要练习这些技能,如果不练习,您将陷入困境。
tempstring[0]!='#'|tempstring[0]!='\n'| | tempstring[0]!=''
总是正确的。请注意,
fgets
可能看不到完整的一行。这就是为什么首先在纸上计划代码是有帮助的,尤其是当你是新手时。请养成这样做的习惯。随着时间的推移,你会变得更好,并且能够在你的头脑中做到这一点,但尝试从头开始编写代码就像尝试驾驶一架没有使用操纵杆经验的战斗机一样。您可以从现在的位置开始从头开始编写代码,但您需要练习这些技能,如果不练习,您将陷入困境。如果文件在最后一行末尾没有POSIX
“\n”
,您还可以有一个额外的警告。在这种情况下,您需要在每次读取时设置一个标志(例如
int feol=0;
,并在验证每行结束时设置
feol=1;
。退出读取循环后,您需要检查
tempstring&&!feol
,并处理最后一行输入(将计数增加
1
)如果字符测试通过。如果文件在最后一行末尾没有POSIX
'\n'
,您可以有一个额外的警告。在这种情况下,您需要设置一个标志(例如,每次读取时
int feol=0;
,并在验证每行结束时设置
feol=1;
。退出读取循环后,如果字符测试通过,则需要检查是否
tempstring&&!feol
,并处理最后一行输入(将计数增加
1
)。