zoukankan      html  css  js  c++  java
  • C/C++拾遗(二)

    scanf函数

    声明形式:int scanf(char *format, ...);

    scanf函数从标准输入中读取字符序列,按照format中的格式说明对字符序列进行解释,并把结果保存在其余的参数中。

    当scanf函数扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况时,该函数终止,返回成功匹配并赋值的输入项的个数。

    这里有一个有意思的程序:

    #include <stdio.h>
    int main()
    {
        char str[80];
        char str1[80];
        char str2[80];
        
        scanf("%s",str);/*此处输入:I love you!  */
        printf("%s",str);
        sleep(5);/*这里等待5秒,告诉你程序运行到什么地方*/
        scanf("%s",str1);/*这两句无需你再输入,是对键盘盘缓冲区再扫描   */
        scanf("%s",str2);/*这两句无需你再输入,是对键盘盘缓冲区再扫描    */
        printf("\n%s",str1);
        printf("\n%s",str2);
        return 0;
    }

    首先要知道的是scanf遇到以下情况会认为一个数据结束输入:

    • 遇空格、回车、跳格键
    • 遇宽度结束
    • 遇非法输入

    所以上述程序遇到空格认为一个字符串输入结束,就返回了。剩下的字符串还保留在stdin流中,所以下次调用scanf函数时是在stdin流中读取残余信息。

    若是想避免读取到残留信息,直接调用fflush函数清楚缓冲区就行了。

    字符串的输入C++

    #include <iostream>
    #include <windows.h>
    using namespace std;
    int main(int argc, char *argv[])
    {
        const int ArSize = 20;
        char name[ArSize];
        char dessert[ArSize];
        cout<<"请输入名字"<<endl;
        cin>>name;
        cout<<"请输入最喜欢的小吃"<<endl;
        cin>>dessert;
        cout<<"我有一些"<<dessert;
        cout<<"给你,"<<name<<endl;
      system("PAUSE");    
      return 0;
    }

    这里如果输入为

    则得不到正确的结果。这里是因为"cin"每次只读取一个单词,并以空格来标志单词的结束。这样就需要用到get()和getline()函数来读取一行。

    getline函数:用于读取一行字符,通过换行符来确定行尾,但不保存换行符。在存储字符串时,用空字符来替换换行符。

    const函数

    在函数体前加const,例如

    void example(type a, type b)const
    {
    ////
    ///
    }

    这就是一个const函数,主要用在类中,用来避免修改类成员变量。一个const对象只能调用类中的const函数。

    http://zjw86212.blog.163.com/blog/static/116692085200910394324880/

  • 相关阅读:
    11.01T3 实数二分
    11.01T2 树状数组维护动态LIS
    11.1T1打表
    10.31T4 HAOI2010最长公共子序列 计数+容斥原理
    10.31T3 其他算法思想
    10.31T2 点双联通分量+预处理前缀+二分答案
    10.31T1 二分图
    10.30T3 换根
    10.30T2 二分+前缀和(后缀和)
    10.30T1 期望DP
  • 原文地址:https://www.cnblogs.com/7ants/p/3039180.html
Copyright © 2011-2022 走看看