如何循环用户输入并将其复制到文件中,直到使用 C 输入"exit"字符串?



我想写一个小程序,当最大输入是100个字符时,从用户(使用控制台)获取字符串,当用户按下enter键时,它会将输入复制到某个文件。我想在用户输入字符串"exit"

时退出循环

的例子:"嗨,你好吗?"咩咩"退出"我只是不知道如何使它工作-我应该使用scanf吗?获取字符?函数可以吗?

char* buf ;
int i;

 buf = (char*)calloc(100, sizeof(char));
 while(1) 
  {
     fgets(s, sizeof(s), stdin);
     if (strcmp(s , "exit") == 0)
       break;
     else
   ...write to file...
   }

我需要手动输入""吗?

谢谢!

fgets()是可以的,但在某些实现中,它将尾行换行符(n)放在行尾。为了使比较工作,您必须删除它,或者准备您的比较接受"exit""exitn":

if (strcmp(s , "exit") == 0 || strcmp(s , "exitn") == 0)
   break;

fgets(s, sizeof(s), stdin);
char *p = strchr(s, 'n');
if (p) *p = 0;
if (strcmp(s , "exit") == 0)
    break;

旁注:除非您打算将字符串返回给调用函数,否则根本不需要使用calloc()。使用自动数组代替:

char s[0x100]; // or whatever

我应该使用scanf吗?获取字符?函数可以吗?

以上任何一个,但是你的while循环应该转换为:当输入被读取时,输入不是"exit"。你的while循环目前翻译为:当世界没有结束时。

我建议这样做:

while (fgets(s, sizeof s, stdin) == s && strcmp(s, "exitn") != 0) {
    /* ... */
}

我需要手动输入""吗?

没有;仔细选择工具,您可以使用标准字符串库操作由标准I/O库生成的字符串(在上面的fgets/strcmp代码的情况下),或者通过其他更复杂的方式操作非字符串。


p。不需要强制转换malloc, sizeof (char)在c中总是 1。

对于您的问题,fgets()会自动附加

来自c++参考:

A terminating null character is automatically appended after the characters copied to str.

请注意,fgets()在按Enter键时停止读取,并追加n,但是,从你的问题中,我认为这可能对你有利。

关于fgets()scanf()之间的差异,可以在这里找到一个很好的讨论…

相关内容

  • 没有找到相关文章

最新更新