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/

原文地址:https://www.cnblogs.com/7ants/p/3039180.html