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" );
}
}