跨多行获取和处理用户输入

时间:2014-09-30 22:24:07

标签: c input stdin scanf stdio

我试图通过stdin从用户那里获得多行输入(虽然最终,我希望能够指定一个文件)。这个想法是用户在匹配"<"和">"。我希望他们能够调用该程序,然后键入尽可能多的输入,因为他们喜欢多行,直到他们用Control-D终止输入。

所以他们可以这样做: " [这是有效的

输入甚至认为它跨越

三行]" (用括号代替<这样我的文字就不会消失!)

我发现我可以使用fscanf轻松处理这些类型的片段,例如:

fscanf(fp, "<" "%999[^>]" ">", buffer);

但是我在很多方面遇到很多困难,而且我并不完全确定循环使用这些输入并将字符串放在&lt;之间的最佳方法。进入一个只包含相关字符串的数组。

我做了一些研究,人们似乎对fgets与sscanf与fscanf的使用有不同的看法,我不确定每个的优点是什么,因为它们与我的特殊问题。我也不确定如何让换行符不终止输入(就像现在一样)。我应该检查fscanf返回的匹配数量,还是应该寻找EOF终结符?

目前,我的代码看起来像这样(我之前使用匹配来检查每个输入的数量,但后来删除了它)。显然,为了简单起见,这还没有将任何东西移动到数组中。另外,fp目前是stdin,但我想保持足够强大,以便我可以简单地将指针更改为文件,以防我想从文件中读取。

char buffer[1000];

while(true){
    int matches = fscanf(fp, "{" "%999[^}]" "}", buffer);
    if (feof(fp)) break;
    printf("%s\n", buffer);
}

0 个答案:

没有答案