C 使用文件从数组中删除空格

C 使用文件从数组中删除空格,c,C,这是我的代码,请任何人帮我找出为什么它会显示我添加的错误消息,因为nscan的值是2?这是: void read_input(FILE* inputfile,char array[]) { int nscan; char termch; while(TRUE) { nscan = fscanf(inputfile,"%30[^\n]%c",array,&termch); if (nscan == EOF)

这是我的代码,请任何人帮我找出为什么它会显示我添加的
错误
消息,因为
nscan
的值是2?

这是:

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打印错误。如果
termch
不是换行符,则打印错误。这是因为您正在使用OR逻辑运算符,
|
。这就解释了你的行为


因此,如果您想看到更多内容,只需在到达if语句之前打印两个变量的值。当然,
termch
将不同于换行符。

记住,在Windows和DOS上,换行符序列实际上是两个字符,而不仅仅是一个

请记住,输入行可能大于29个字符,这将导致第二个参数不包含换行符

请记住,输入行可能包含一些
空白
,如空格或制表符,那么对fscanf()的调用将失败

关于这些方面:

if (nscan != 2 || termch != '\n' ){
  printf("error  \n");
}
“如果”条件是

表示如果其中一部分为真,则结果为真

所以当termch!='\n'为真,则将执行封闭的函数体

建议将“如果”语句修改为:

if (nscan != 2 || termch != '\n' ){
      printf("error  \n");
}
以便输出有意义的消息


此外,while()循环和包含的代码还有一些不足之处

建议:

if (nscan != 2 ) 
{
    printf( "fscanf failed to read both parameters\n");
}
else if(termch != '\n' ) 
{
    printf( "fscanf failed to read the complete line\n");
}

当然,如果输入行大于29个字符,则将输出错误消息,循环的下一次迭代将读取该行的其余部分。

我认为读取前的美元符号是一个打字错误,对吗?这不是有效的C。请阅读并提供@Olaf,有一个小语法错误,
$
,但除此之外,它是有效的C。我冒昧地删除了
$
,因为它只是一个与错误消息出现的原因无关的打字错误。了解正在读取的输入文件的内容是什么会很有趣。确切地说,我需要nscan为2,因为fscanf读取2个参数(字符串和termch必须是“\n”)。问题是,我们在大学里对其他程序使用了这种方法,nscan为4,我们使用了if(nscan!=4 | | termch!='\n')打印错误。这就是我想做的,但我做不好乔治,那是另一个问题。我认为这是对你问题的回答,所以我建议你接受它,如果你喜欢的话,然后发布一个新的问题,但要具体一些,例如提供一些输入。希望能有所帮助。c编程很有趣//输入c编程很有趣//输出我已经这样做了,但我的问题是,当我执行程序时,它会给出“错误”消息,而它不应该给出,因为它工作正常,请再次阅读答案。我上面的注释也是这样@GPwoopzi.doit,nscan=1和termch=u,这意味着它不读取字符串的'n'和'\n'
while(1)
{
    if( 1 != (nscan == fscanf(inputfile,"%30[^\n]\n",array) ) )       
    { 
        perror( "fscanf failed to read full line of input" );
    }
}