如何检查来自标准输入的输入是否为空或换行符
How to check if input from stdin is null or newline
正在学习c,写过这段代码
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
char message[100];
FILE *secret=fopen(argv[1],"w");
FILE *public=fopen(argv[2],"w");
while(scanf("%99s\n",message)==1)
{
if (strcmp(message,"\n")) //this does not work as expected
break;
if(strstr(message,"secret"))
fprintf(secret,"%s\n",message);
else
fprintf(public,"%s\n",message);
}
return 0;
}
程序应该这样做
- 接受来自命令行的两个参数,即两个文件的名称
- 创建两个包含指针 secret 和 public 的文件。
- 从标准输入读取输入
- 在一个while循环中
- 如果输入为空(null 或换行符),退出循环。
- 如果输入包含短语"secret",将行放入机密文件。
- 否则将其放入 public 文件。
问题是检查输入是否为空的代码部分不起作用。该程序不会在空输入(即换行符)时退出。正确的代码是什么?
顺便说一句,我读了How to check if stdin is empty in C,但我什么都不懂。
您可以使用 fgets
而不是 scanf
来读取字符串。 fgets
不仅可以防止缓冲区溢出,还可以让您使用前导 \n
字符来测试空行。
while( fgets(message, sizeof message, stdin))
...
if( message[0] == '\n' ) break; /* Step 4.1 */
str[ strlen(str) - 1 ] = '[=10=]'; /* remove the newline before sending to the file */
一个空行,只输入,应该结束这个循环
while(scanf("%99[^\n]%*c",message)==1)
{
if(strstr(message,"secret"))
fprintf(secret,"%s\n",message);
else
fprintf(public,"%s\n",message);
}
正在学习c,写过这段代码
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
char message[100];
FILE *secret=fopen(argv[1],"w");
FILE *public=fopen(argv[2],"w");
while(scanf("%99s\n",message)==1)
{
if (strcmp(message,"\n")) //this does not work as expected
break;
if(strstr(message,"secret"))
fprintf(secret,"%s\n",message);
else
fprintf(public,"%s\n",message);
}
return 0;
}
程序应该这样做
- 接受来自命令行的两个参数,即两个文件的名称
- 创建两个包含指针 secret 和 public 的文件。
- 从标准输入读取输入
- 在一个while循环中
- 如果输入为空(null 或换行符),退出循环。
- 如果输入包含短语"secret",将行放入机密文件。
- 否则将其放入 public 文件。
问题是检查输入是否为空的代码部分不起作用。该程序不会在空输入(即换行符)时退出。正确的代码是什么?
顺便说一句,我读了How to check if stdin is empty in C,但我什么都不懂。
您可以使用 fgets
而不是 scanf
来读取字符串。 fgets
不仅可以防止缓冲区溢出,还可以让您使用前导 \n
字符来测试空行。
while( fgets(message, sizeof message, stdin))
...
if( message[0] == '\n' ) break; /* Step 4.1 */
str[ strlen(str) - 1 ] = '[=10=]'; /* remove the newline before sending to the file */
一个空行,只输入,应该结束这个循环
while(scanf("%99[^\n]%*c",message)==1)
{
if(strstr(message,"secret"))
fprintf(secret,"%s\n",message);
else
fprintf(public,"%s\n",message);
}