C 读取字符串中的enter键
我正在使用创建电子邮件的功能,但我不知道如何使用身体部位的C 读取字符串中的enter键,c,string,store,enter,C,String,Store,Enter,我正在使用创建电子邮件的功能,但我不知道如何使用身体部位的fgets读取用户的“输入”。我的代码如下: void read_email_interactive(Email* email) { printf("Subject: "); fgets(email->subject,DEFAULT_MAX_FIELD,stdin); printf("From: "); fgets(email->from,DEFAULT_MAX_FIELD,stdin); printf("To: ");
fgets
读取用户的“输入”。我的代码如下:
void read_email_interactive(Email* email) {
printf("Subject: ");
fgets(email->subject,DEFAULT_MAX_FIELD,stdin);
printf("From: ");
fgets(email->from,DEFAULT_MAX_FIELD,stdin);
printf("To: ");
fgets(email->to,DEFAULT_MAX_FIELD,stdin);
printf("Body: ");
fgets(email->body,MAX_BODY,stdin);
printf("ID: ");
fgets(email->id,DEFAULT_MAX_FIELD,stdin);
有什么想法吗?谢谢大家! 假设文本的最大大小是可以接受的,下面的代码段可以:
#define BODY_MAX_LEN (1234)
struct Email
{
char body[BODY_MAX_LEN + 1];
...
}
int main(void)
{
struct Email email = {0};
size_t s = 0;
while ((BODY_MAX_LEN > s) && fgets(email.body + s, BODY_MAX_LEN + 1 - s, stdin))
{
s = strlen(email.body);
if (!s || ('\n' != email.body[s - 1]))
{
break; /* EOF detected (user pressed Ctrl-D (UNIX)/Ctrl-Z (Window). */
}
}
if (ferror(stdin))
{
perror("fgets() failed");
exit(EXIT_FAILURE);
}
...
之后
printf("Subject: ");
投入
fflush(stdout);
这样消息就会出现
fgets()
并读取新行!是的,但在正文消息中,用户通常会按几个“回车键”,但在这里,如果我按回车键,它将进入下一个屏幕,身体部分由多条线组成,你想把它们当作块来阅读吗?这个想法是考虑阅读身体,当用户进入空行时,你会发现身体已经完成了,让我们移动到下一节。您也可以按照此命令执行其他命令。@JIANCHEN:刚才说了解决方案。重新设计代码,将空行合并为部分的结尾。@usr2564301:当然可以。谢谢你指出这一点。更正。