首页 > 其他 > 详细

记录编程中的一些经验 - 1

时间:2021-03-09 09:19:55      阅读:23      评论:0      收藏:0      [点我收藏+]

?

scanf 与 cin

?

scanf 与 cin 都是 C/C++ 中常用来输入的工具. 以下是关于它们各自的优缺点

?

scanf 的优点

?

  1. scanf 比 cin 快
  2. scanf 在进行浮点数的操作时比 cin 要方便.
  3. 在进行大量输入时 scanf 也比 cin 要方便
  4. scanf 在输入时可以设置字符宽度, 而 cin 要相对麻烦点.

?

scanf 的缺点

?

  1. 不支持一些 C++ 中新的数据类型, 如 输入 string 变量等.
  2. 输入的要求比 cin 和 cout 要多.
  3. 在字符串输入方面没 cin 和 cout 方便, 经常会出现各种不好找的 bug

?

cin 的优点

?

  1. 在字符串输入方面强于 scanf . 有很多用来解决字符串输入问题的方法
  2. 输入要求和需要注意的地方没有 scanf 和 printf 那么多.

?

cin 的缺点

?

  1. 速度比 scanf 慢
  2. 大量输入数据时比 scanf 麻烦.
  3. cin 设置输入的字符宽度也比 scanf 麻烦

?

scanf 与 cin 在处理字符串上的区别

?

scanf

?

  1. **scanf 在已经输入一个字符或数字后遇到空白符 (如空格, 回车, tab 等) 会直接结束读取. **

  2. 如果 scanf 读取时超出了格式化输入的范围, 那么超出范围的那部分数据就会留在缓冲区, 要是后面还有一个 scanf 的话则它会将缓冲区的数据进行读取. 还有, 如果 scanf 读取时遇到了空白符, 而后面还有东西没有读取, 同样会把它们留在缓冲区. 想解决这个问题就需要清空缓冲区

  3. scanf 输入完毕后会将 ‘\n‘ 也读取进来

  4. scanf 的输入可以设置字符宽度, 意义在于选择输出. 例如
    ?

    #include <cstdio>
    
    using namespace std;
    
    int main(void)
    {
        char x[40];
    
        scanf("%4s", x);		/*只读取前四个字符*/
    
        printf("%s\n", x);		/*只输出了四个字符*/
    
        return 0;
    }
    

?

cin

?

  1. scanf 前两项的特性 cin 同样具有.
  2. cin 没有格式化输入, 比较方便.
  3. cin 输入完毕后不会将 ‘\n‘ 读取
  4. cin 设置输入的字符宽度相对麻烦
  5. cin有许多的方法去处理字符串, 例如 cin.getline() 解决了读取字符串遇到空白符后停止读取的问题.

?


?

总结

?

在字符串处理上面 cin 更方便, 在数字处理上面 scanf 更甚一筹. 但无奈 cin 速度较慢, 否则 cin 在使用体验上完全能取代漏洞较多的 scanf.* scanf 与 cin

?

scanf 与 cin

?

scanf 与 cin 都是 C/C++ 中常用来输入的工具. 以下是关于它们各自的优缺点

?

scanf 的优点

?

  1. scanf 比 cin 快
  2. scanf 在进行浮点数的操作时比 cin 要方便.
  3. 在进行大量输入时 scanf 也比 cin 要方便
  4. scanf 在输入时可以设置字符宽度, 而 cin 要相对麻烦点.

?

scanf 的缺点

?

  1. 不支持一些 C++ 中新的数据类型, 如 输入 string 变量等.
  2. 输入的要求比 cin 和 cout 要多.
  3. 在字符串输入方面没 cin 和 cout 方便, 经常会出现各种不好找的 bug

?

cin 的优点

?

  1. 在字符串输入方面强于 scanf . 有很多用来解决字符串输入问题的方法
  2. 输入要求和需要注意的地方没有 scanf 和 printf 那么多.

?

cin 的缺点

?

  1. 速度比 scanf 慢
  2. 大量输入数据时比 scanf 麻烦.
  3. cin 设置输入的字符宽度也比 scanf 麻烦

?

scanf 与 cin 在处理字符串上的区别

?

scanf

?

  1. **scanf 在已经输入一个字符或数字后遇到空白符 (如空格, 回车, tab 等) 会直接结束读取. **

  2. 如果 scanf 读取时超出了格式化输入的范围, 那么超出范围的那部分数据就会留在缓冲区, 要是后面还有一个 scanf 的话则它会将缓冲区的数据进行读取. 还有, 如果 scanf 读取时遇到了空白符, 而后面还有东西没有读取, 同样会把它们留在缓冲区. 想解决这个问题就需要清空缓冲区

  3. scanf 输入完毕后会将 ‘\n‘ 也读取进来

  4. scanf 的输入可以设置字符宽度, 意义在于选择输出. 例如
    ?

    #include <cstdio>
    
    using namespace std;
    
    int main(void)
    {
        char x[40];
    
        scanf("%4s", x);		/*只读取前四个字符*/
    
        printf("%s\n", x);		/*只输出了四个字符*/
    
        return 0;
    }
    

?

cin

?

  1. scanf 前两项的特性 cin 同样具有.
  2. cin 没有格式化输入, 比较方便.
  3. cin 输入完毕后不会将 ‘\n‘ 读取
  4. cin 设置输入的字符宽度相对麻烦
  5. cin有许多的方法去处理字符串, 例如 cin.getline() 解决了读取字符串遇到空白符后停止读取的问题.

?


?

总结

?

在字符串处理上面 cin 更方便, 在数字处理上面 scanf 更甚一筹. 但无奈 cin 速度较慢, 否则 cin 在使用体验上完全能取代漏洞较多的 scanf.

记录编程中的一些经验 - 1

原文:https://www.cnblogs.com/ICeVe/p/14503331.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!