我试图将输入逐行保存在字符串中。我需要能够检测到一条空行或一行只包含空格并打印"忽略"如果它发生了。我怎么做? strlen(str)== 0似乎没有用。
int getLine(char str[]) {
int i = 0;
int c;
while (i < N - 1 && (c = getchar()) != EOF && c != '\n') {
str[i] = c;
++i;
}
if (c == EOF) return 0;
str[i] = '\0';
return 1;
}
答案 0 :(得分:1)
新功能:
int getNonBlankLine(char str[])
{
int nb = 0;
while (nb == 0)
{
int i = 0;
int c;
while (i < N - 1 && (c = getchar()) != EOF && c != '\n')
{
str[i++] = c;
if (!isblank(c))
nb++;
}
}
if (c == EOF)
return 0;
str[i] = '\0';
return i;
}
返回行的长度;它从返回的数据中排除了换行符;它会跳过所有空行;它没有溢出缓冲区;它没有给你一种方法来检测线路是否都不适合缓冲区。
如果您不想使用新功能或在上面的函数中添加代码来代替旧的函数体,则必须在读取后分析该行并再次调用输入。其他答案为您提供了可用于此的代码。
您还可以选择识别空白和标签的isblank()
和识别空白,制表符,换行符,换页,回车符和垂直标签isspace()
)的" \t\n\f\r\v"
。
答案 1 :(得分:0)
strlen
将检测空行,但它不会检测完全由空格组成的行。你可以自己编写这个函数:
int all_space(const char *str) {
while (*str) {
if (!isspace(*str++)) {
return 0;
}
}
return 1;
}
答案 2 :(得分:0)
仅包含空格的行不为空。它充满了空间。
有很多方法可以做到这一点。希望这很清楚。
// Returns nonzero iff line is a string containing only whitespace (or is empty)
int isBlank (char const * line)
{
char * ch;
is_blank = -1;
// Iterate through each character.
for (ch = line; *ch != '\0'; ++ch)
{
if (!isspace(*ch))
{
// Found a non-whitespace character.
is_blank = 0;
break;
}
}
return is_blank;
}