c/c++语言开发共享扫描到新行

我想读取输入的所有文本,直到输入换行符。

这是我的代码。

int i=0; char ch[MAX]; printf("Enter the textn"); while(true) { scanf("%c",&ch[i]); if(ch[i]=='n') break; i++; } 

但是当我尝试执行它时只读一个单词。

我也试过scanf("%s",ch); 但结果是一样的。

    在依赖ch[i]获得有效值之前,你没有检查scanf()成功,这不是一个好主意。

    只需使用fgets()一次读取整行。

    将评论转移到答案。

    你的代码会起作用。 您发布的代码扫描所有内容,直到找到换行符( n )。 但正如Jonathan Leffler评论的那样,你绝不会NUL终止你的字符串。 要做到这一点,只需使用

     ch[i]=''; 

    循环之后。 此外,用户可以输入比MAX-1更多的字符(最后一个用于 ),这可能会导致缓冲区溢出 。 你应该添加一个支票

     if(i==MAX-1) break; 

    就在您的scanf之前,以防止它溢出。

    注意scanf("%s",ch); 将扫描,直到遇到空格或换行符。


    不要逐个字符地循环和扫描,只需使用

     scanf("%[^n]",ch); getchar(); 

    上面的scanf扫描所有内容,直到找到换行符并将它们放入ch 。 然后getchar()stdin丢弃n 。 您还可以通过限制scanf读入ch的字符数来提高安全性。

     scanf("%49[^n]",ch); 

    上面的scanf最多扫描49个字符,并在最后添加 。 您可以在那里替换MAX-1的值。 我用50作为例子。

    正如@Jonathan Leffler评论的那样,OP的代码不会使字符串终止或阻止缓冲区溢出。

    由于代码一次获取1个char ,因此使用更简单的fgetc()

     int i=0; char ch[MAX]; int single; // Important that this in an int to distinguish EOF from input. printf("Enter the textn"); while((single = fgetc(stdin)) != EOF) { if (i >= (MAX-1)) { ; // Too many, do not save or maybe indicate error } else { ch[i++] = single; } if (single == 'n') { break; } } ch[i] = ''; // Add termination 

    你的代码工作正常。 我检查过,它读的是一行而不是单词。

    我希望你的代码对你更好:

     int main() { int i=0; char ch[100]; printf("Enter the textn"); gets(ch); // input text puts(ch); // output text return 0; } 

    输入: asdf ghjkl zxcvb

    输出: asdf ghjkl zxcvb

      以上就是c/c++开发分享扫描到新行相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/519489.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐