从给定的索引开始,C中的getLine()是否可能?

时间:2014-12-27 11:01:10

标签: c input getline

getline 函数扫描整个输入行并将其存储在给定的char数组中。假设我想使用 getline 方法从给定索引开始扫描输入。我怎样才能做到这一点?

例如,假设输入为:您好,我的名字是John。

我希望getline只存储我的名字是John。

    char* cmd = NULL;
    size_t size = 0;

    getline(&cmd, &size, stdin); // code to get whole input line.

谢谢

4 个答案:

答案 0 :(得分:1)

使用fgets功能可以将整行作为输入。之后根据位置 你需要的,你可以得到它。

例如,

char arr1[20],arr[]="hi this is for testing";

strcpy(arr1,arr+10); // In this you can use the cmd for that.

您将获得所需的字符串。

答案 1 :(得分:1)

getline没有这样的能力。但是,它从默认输入流中读取,并且还有许多其他函数也从该流中读取。

最基本的阅读功能之一是getc()。它读取一个单个字符。所以,要#34; make" getline从第N个字符开始读取,在它之前使用N次getc

// "skip" N characters - read N and forget them immediatelly
for(int i=0;i<N;++i)
    getc(); // remember: that's a READ, it can FAIL

getline( ... ); // remember: that's a READ, it can FAIL

当然,这样,所有那些跳过的角色现在都是不可恢复的(好吧,差不多,但让我们跳过它)。此外,此方法不允许您向后移动&#34;。你只能跳过&#34;前进&#34;。

如果您需要回顾输入流中的任何字符,则需要某种缓冲。将全部或部分输入读入缓冲区,查看整个缓冲区(数据数组等),从缓冲区中删除有趣的部分,将新的/下一个数据加载到缓冲区中,依此类推。缓冲区很好! :)

但是,这个逐个阅读也有时候也可以。这种方式的主要优点是跳过&#34;是它根本不使用任何额外的内存。如果要跳过的数据很大,就像几公斤/兆/ /字节一样,那么将它全部打包到缓冲区中只是为了立即抛出它真的很浪费。

答案 2 :(得分:1)

答案是否定的。

您无法根据索引使用getline()进行阅读。您只需要传递缓冲区指针的地址和大小变量的地址。读取行后,您可以解析缓冲区并根据索引获取所需内容。

答案 3 :(得分:1)

您可以使用fscanf通过指定大小和星号来忽略固定数量的字符,如下所示:

fgets(cin, "%*6[^\n]"); // Ignore the first six characters, or up to \n
getline(&cmd, &size, stdin); // Read the rest of your string

格式字符串中的星号表示“读取和忽略”。 Six指定要读取(和忽略)的字符数。