多行输入从 C 中的 stdin 读取输入

发布于 2024-12-09 05:56:12 字数 151 浏览 0 评论 0原文

大家好,我想问一下,c 编程中有一种方法可以从 stdin 读取多行输入,

因为我不能使用 scanf() 也不能使用 fgets,因为它需要输入直到 /n

以及如何停止输入,例如一些分隔符

也非常感谢

我也没有使用 c++

Hello every one I want to ask that is there a way in c programming through which I can read multi line input from stdin

as I cant use scanf() also not fgets as it take input till /n

and also how to stop the input like some delimiter

thanks alot

also I am not using c++

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

后知后觉 2024-12-16 05:56:12

使用fread

例如,从链接复制

#include <stdio.h>
...
size_t bytes_read;
char buf[100];
FILE *fp;
...
bytes_read = fread(buf, sizeof(buf), 1, fp);
...

Use fread.

eg, copied from the link

#include <stdio.h>
...
size_t bytes_read;
char buf[100];
FILE *fp;
...
bytes_read = fread(buf, sizeof(buf), 1, fp);
...
甜宝宝 2024-12-16 05:56:12

我建议您使用 getc 一次读取一个字符,查找所需的任何分隔符,并将非分隔符附加到您手动控制大小的缓冲区(使用 realloc)代码>)。另一种方法是使用 fread 读取大块并扫描分隔符,但 getc 方法可能更容易、更简单。

确保查找 EOF 以及显式分隔符。

I recommend you read input one character at a time with getc, look for whatever delimiter you want, and append the non-delimiter characters to a buffer whose size you control manually (with realloc). The alternative is to read large blocks with fread and scan for the delimiters, but the getc approach is likely to be easier and simpler.

Make sure to look for EOF as well as your explicit delimiters.

青芜 2024-12-16 05:56:12

如果 C 中有适当的字符串数据类型,并且具有自动内存管理功能,那么这个任务将非常简单。这个想法是:

string s = str_new();
const char *delimiter = "EOF\n";
while (true) {
  int c = fgetc(f);
  if (c == EOF) {
    break;
  }
  str_appendc(s, c);
  if (str_endswith(s, delimiter)) {
    str_setlen(s, str_len(s) - strlen(delimiter));
    break;
  }
}

您只需编写适当的函数来处理字符串。

This task would be pretty simple if there were a proper string datatype in C, with automatic memory management. The idea is:

string s = str_new();
const char *delimiter = "EOF\n";
while (true) {
  int c = fgetc(f);
  if (c == EOF) {
    break;
  }
  str_appendc(s, c);
  if (str_endswith(s, delimiter)) {
    str_setlen(s, str_len(s) - strlen(delimiter));
    break;
  }
}

You just have to write the proper functions for the string handling.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文