基本上我做了一个读取两行的短程序,如果它们不同,它会写两个。如果thery是相同的句子,程序应只写一个句子。程序应该在遇到两个空行时停止。这是一个问题。我无法弄清楚如何去做。我已经尝试过使用strcmp()函数但是它也没有用。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char sent1[6000], sent2[6000];
while(1){
fgets(sent1, sizeof(sent1), stdin);
fgets(sent2, sizeof(sent2), stdin);
if(strcmp(sent1, sent2)!=0)
printf("%s%s", sent1, sent2);
else
printf("%s", sent1);
if((sent1[0] == '/0') && (sent2[0] == '/0'))
break;
}
return 0;
}
答案 0 :(得分:0)
您的行不为空,因为fgets()
会在换行符中读取'\n'
)。因此,您需要检查换行符号。
if((sent1[0] == '\n') && (sent2[0] == '\n'))
break;
不再那么相关了,但你的比较是错误的,因为空字符是'\0'
,而不是'/0'
。
如前所述,如果缓冲区中有空格,fgets()
将读取换行符。在你的情况下,既然你在比较它们,你需要意识到这一点。可能还需要删除换行符。如,
char *p;
if ((p = strchr(sent1, '\n')) != NULL)
*p = '\0';
(与sent2
相同)
要考虑的另一个案例是fgets()
调用失败的情况。您需要检查其失败的返回值。失败时fgets()
返回NULL。
答案 1 :(得分:0)
fgets读取包含新行字符的行。因此,如果您的文件包含空行,则此行可能位于'\n'
0
,而不是'\0'
。
尝试:
if( ((sent1[0] == '\0') || (sent1[0] == '\n'))
&& ((sent1[0] == '\0') || (sent1[0] == '\n')) )
此外,请注意,您应该检查fgets
的返回值,如果已到达文件末尾,则为NULL
。在这种情况下,sent1
或sent2
不会再被更改,您可能会遇到无限循环。