直升机,
if('\t' == input [0] ||'\v' == input [0] ||'\r' == input [0] ||'\n' == input [0] || '\0' == input[0] || '' == input[0])
输入是字符数组:)
这是我在文件中检查空白行的代码行,但它从来没有选中空行例如..
我的代码读取8位十六进制值,我希望在无效(已经排序)或当空行,空白行或EOF时终止。
如果我的文件是这样的话,它可以工作...... 11111111 11111111
^空行上有空格 但如果没有空间它只是打入一个infitie循环,这非常烦人。
#define MAXIN 4096
static char input[MAXIN];
char last;
/*Reading the current line */
fgets(input, MAXIN, f);;
if (input[8] == '\r') input[8] = '\0';
/* First of all check if it was a blank line, i.e. just a '\n' input...*/
if('\t' == input [0] ||'\v' == input [0] ||'\r' == input [0] ||'\n' == input [0] || '\0' == input[0] || '' == input[0])
{printf("##EMPTY");return(INERR);}
if ('\n' == input[0]) return(INERR);
if ((sscanf(input,"%8x%c",&result,&last) < 2)) return(INERR);
if ('\n' != last) return(INERR);
}
答案 0 :(得分:2)
您需要检查fgets
的返回值。此函数返回NULL
以表示“文件结束”。简单地说,试试这个:
if (!fgets(input, MAXIN, f))
return INERR;
答案 1 :(得分:1)
您可以使用此代码检查该行是否为空:
typedef enum { false = 0, true } bool;
bool isEmptyLine(const char *s) {
static const char *emptyline_detector = " \t\n";
return strspn(s, emptyline_detector) == strlen(s);
}
并像这样测试:
fgets(line,YOUR_LINE_LEN_HERE,stdin);
if (isEmptyLine(line) == false) {
printf("not ");
}
printf("empty\n");
答案 2 :(得分:0)
你使用了错误的方法。您必须检查该行是否以'\ n'结尾,以及该行中该字符之前的所有字符是否都不可打印。仅检查第一个字符是不够的。
应该是这样的:
int len = strlen(input);
int isEmpty = 1;
if(input[--len] == '\n')
{
while (len > 0)
{
len--;
// check here for non printable characters in input[len]
// and set isEmpty to 0 if you find any printable chars
}
}
if(isEmpty == 1)
// line is empty