#include
#include
#define BUF 256
int has_ch(char ch, const char *line);
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
char line[BUF];
if (argc != 3)
{
printf("usage:%s character filename\n", argv[0]);
exit(EXIT_FAILURE);
}
ch = argv[1][0];
if ((fp = fopen(argv[2], "r")) == NULL)
{
printf("can't open %s\n", argv[2]);
exit(EXIT_FAILURE);
}
while (fgets(line,BUF,fp)!=NULL)
{
if (has_ch(ch, line))
fputs(line, stdout);
}
fclose(fp);
return 0;
}
int has_ch(char ch, const char * line)
{
while (*line)
if (ch == *line++)
return (1); //??????
return 0;
}
最后的has_ch函数,我用return 1,命令行显示no valid data。我照着书上改成return (1)后完美运行,请问这是怎么回事呢?这两个return有何区别呢?谢谢
没有任何区别。括号是改变优先级用的,在表达式外侧加上括号什么也不会影响。
理论上没区别,习惯上如果返回单个常量或变量值不加括号,如果返回表达式的值加括号(当然不加括号也行)。但有一点必须注意:return和后面的返回值之间必须有空格,你遇到的问题大概是return和1写在一起没空格,这样编译器会看成一个return1(成未定义变量了)而不是返回语句。