[英]Removing blanks from an array using files
void read_input(FILE* inputfile,char array[]) {
int nscan;
char termch;
while(TRUE) {
nscan = fscanf(inputfile,"%30[^\n]%c",array,&termch);
if (nscan == EOF)
break;
if (nscan != 2 || termch != '\n' ){
printf("error \n");
}
}
}
这是我的代码,由于nscan
值为2,请问有谁能帮助我找出为什么显示我添加的error
消息?
这个:
if (nscan != 2 || termch != '\n' ){
printf("error \n");
}
说:
如果nscan
不是2打印错误。 如果termch
不是换行符,则打印错误。 这是因为您正在使用OR逻辑运算符||
。 这说明了您得到的行为。
因此,如果要查看更多内容,只需在到达该if语句之前打印两个变量的值即可。 当然, termch
与换行符有所不同。
记住在Windows和DOS上,换行符实际上是2个字符,而不仅仅是一个字符...
记住输入行可能大于29个字符,这将导致第二个参数不包含换行符...
记住输入行可能包含一些white space
例如空格或制表符,那么对fscanf()的调用将失败。
关于这些行:
if (nscan != 2 || termch != '\n' ){
printf("error \n");
}
如果条件为or
和or
表示如果任一部分为真,则结果为真。
因此,当termch!='\\ n'为true时,将执行封闭的函数体。
建议将“ if”语句修改为:
if (nscan != 2 )
{
printf( "fscanf failed to read both parameters\n");
}
else if(termch != '\n' )
{
printf( "fscanf failed to read the complete line\n");
}
这样就可以输出有意义的消息。
而且,while()循环和封闭的代码还有一点不足。
建议:
while(1)
{
if( 1 != (nscan == fscanf(inputfile,"%30[^\n]\n",array) ) )
{
perror( "fscanf failed to read full line of input" );
}
}
当然,如果输入行大于29个字符,则将输出错误消息,并且循环的下一次迭代将读取行的其余部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.