c - 读取字符串中的输入

标签 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(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);
  }

  ...

关于c - 读取字符串中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48721053/

相关文章:

c - 在 C 中读取行并将行分隔到链表中

c - 输入通过循环递增的变量中的元素并使用循环输出元素

c++ - curl_easy_cleanup 不清除 curl 指针

c - 老版本的C语法差异?

c# - 如何使用 C# 以编程方式将 x509 证书添加到本地机器存储

apache-pig - 写一个组的唯一键作为文件夹名称和包内容作为记录?

string - 不应将空字符串隐式转换为 false

java - 在 Java 的 While 循环期间替换字符串中的字符

字符串语法问题中的Python变量?

java - 将资源文件存储为类似 hashmap 的结构