c/c++常见输入汇总

目录

C语言

1.scanf()

2.getchar()

3.getche()

3. getch()

4.getc()

5.fgetc()

6.scanf_s()

7.sscanf()

8.sscanf_s()

9.fscanf()

10.fscanf_s()

11.getcwd()

12.fwscanf() fwscanf_s()等

13.gets()(已被代替)

14.gets_s()

15.fgets()

C++

C++ cin 详解之终极无惑_Dablelv的博客专栏-CSDN博客_cin是什么意思



C语言

注意:因为兼容,以下函数基本也适用于C++

1.scanf()

原型:位于头文件“stdio.h”中

int scanf(const char *format, ...);

用法: scanf(“格式控制字符串”, 地址表列);

返回值:所输入的数据与格式字符串中匹配次数,出错时则返回EOF(-1)

详解:scanf函数详细讲解 - wind飘雪 - 博客园

2.getchar()

原型:位于头文件“stdio.h”中

 int getchar(void);

用法:获取用户输入的一个字符

char c;
c = getchar();

返回值:用户输入的第一个字符的ASCII码,若出错返回-1

详解:如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。也就是说,后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。

3.getche()

原型:位于 "conio.h "头文件中

 int getche(void);

用法:读取从控制台输入的第一个字符

返回值:字符ASCII码值

详解:没有缓冲区,输入一个字符后会立即读取,不用等待用户按下回车键,getche() 位于 conio.h 头文件中,而这个头文件是 Windows 特有的,Linux 和 Mac OS 下没有包含该头文件。换句话说,getche() 并不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。

3. getch()

原型:位于"conio.h"头文件中

int getch (void);

用法:读取从控制台输入的第一个字符

返回值:字符的ASCII码值

详解:getch() 也没有缓冲区,输入一个字符后会立即读取,不用按下回车键,这一点和 getche() 相同。getch() 的特别之处是它没有回显,看不到输入的字符。所谓回显,就是在控制台上显示出用户输入的字符;没有回显,就不会显示用户输入的字符,就好像根本没有输入一样。回显在大部分情况下是有必要的,它能够与用户及时交互,让用户清楚地看到自己输入的内容。但在某些特殊情况下,我们却不希望有回显,例如输入密码,有回显是非常危险的,容易被偷窥。注意,和 getche() 一样,getch() 也位于 conio.h 头文件中,也不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。

4.getc()

原型:位于头文件"stdio.h"

 int getc(FILE *stream);

用法:用于从流中取字符

#include 
int main(){
    char ch;
    ch = getc(stdin);  // 从标准输入控制台中读取字符                            
    printf("The character input was: '%c'\n", ch);
    return 0;
}
#include 
#include  // exit()
int main()
{
    char ch;
    FILE *fstream;
    fstream = fopen("test.txt", "at+");
    if (fstream == NULL)
    {
        printf("read file test.txt failed!\n");
        exit(1);
    }
    while ((ch = getc(fstream)) != EOF) // 从文件流中读取字符
    {
        putchar(ch);
    }
    fclose(fstream);
    return 0;
}

返回值:字符的ASCII码值

详解:读取控制台输入字符时存在缓冲区。若从一个文件中读取一个字符,读到文件尾而无数据时便返回EOF。getc()与fgetc()作用基本相同,但在某些库中getc()为宏定义,而非真正的函数。

5.fgetc()

原型:位于头文件“stdio.h”中

int fgetc(FILE *stream);

用法:从流中取字符,基本同getc()

返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

详解:fgetc()和getc()的细微差别见fgetc 与 getc的区别_zhangna的博客-CSDN博客_fgetc getc

6.scanf_s()

简介:scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。

原型:位于头文件“stdio.h”中

int scanf_s( const char *format [, argument]...);

用法:在调用该函数时,必须提供一个数字以表明最多读取多少位字符。

char buf[5]={'\0'};

scanf_s("%s",buf,5); //最多读取4个字符,因为buf[4]要放'\0' 

/* scanf_s最后一个参数n是接收缓冲区的大小(即buf的容量),表示最多读取n-1个字符.
如果输入abcdefghijkl,则buf只会接受前4个字符*/

返回值:同scanf()

详解:很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。

7.sscanf()

原型:位于头文件“stdio.h”中

int sscanf(const char *str, const char *format, ...) ;

用法: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。

#include 
#include 
#include 

int main()
{
   int day, year;
   char weekday[20], month[20], dtm[100];

   strcpy( dtm, "Saturday March 25 1989" );
   sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );

   printf("%s %d, %d = %s\n", month, day, year, weekday );
    
   return(0);
}

返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

详解:C 库函数 – sscanf() | 菜鸟教程

8.sscanf_s()

原型:位于头文件“stdio.h”中

int sscanf_s( const char *buffer, const char *format [, argument ] ... );

用法:在格式化读取字符串时,需要在字符串之后指定字符串的空间大小

#include 
int main()
{
    char str[] = "192.163IP";
    unsigned char ss[4] = {'\0'};
    char ano_str[3] = {'\0'};
    sscanf_s(str, "%hhu%c%hhu%s", &ss[0], &ss[1], sizeof(char), &ss[2], ano_str, sizeof(char) * 3);
    /* 注意最后对于字符串来说,参数位3个字节,与scanf_f同理 */
    printf("%hhu%c%hhu%s", ss[0], ss[1], ss[2], ano_str);
    return 0;
}

返回值:同sscanf()

详解:sscanf_s (File input/output) - C 中文开发手册 - 开发者手册 - 云+社区 - 腾讯云

9.fscanf()

原型:位于头文件“stdio.h”中

int fscanf(FILE *stream, const char *format, ...);

用法:从流读取格式化输入

#include 
#include 
int main()
{
    char str1[100], str2[100];
    FILE *fp;
    fp = fopen("test.txt", "r");
    fscanf(fp, "%s %s", str1, str2);
    printf("%s\n%s", str1, str2);
    fclose(fp);
    return 0;
}

返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

详解:可以当作全面版的scnaf(),需要额外输入流。详解C 库函数 – fscanf() | 菜鸟教程。

10.fscanf_s()

原型:位于头文件“stdio.h”中

int fscanf_s(FILE *restrict stream, const char *restrict format, ...);

用法:从流读取格式化输入并指定读取最多的字符数

#include 
#include 
int main()
{
    FILE *fp;
    char str[10];
    fp = fopen("test.txt", "r+");
    fscanf_s(fp, "%s", str, 8);
    printf("%s", str);
    fclose(fp);
    return 0;
}

返回值:同fscanf()

详解:同其它带_后缀的。

11.getcwd()

原型:位于头文件 "unistd.h",即unix std

char * getcwd(char * buf, size_t size);

用法:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。

返回值:执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno.

详解:C语言getcwd()函数:取得当前的工作目录_C语言中文网

12.fwscanf() fwscanf_s()等

详见:fscanf、_fscanf_l、fwscanf、_fwscanf_l | Microsoft Docs

13.gets()(已被代替)

原型:位于头文件“stdio.h”中

char *gets(char *str);

用法:从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止。

#include 
int main()
{
    char str[50];
    printf("请输入一个字符串:");
    gets(str);
    printf("您输入的字符串是:%s", str);
    return (0);
}

返回值:如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。

详解:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。

14.gets_s(),getw()相关

原型:位于头文件“stdio.h”中

char *gets_s(char *buffer,size_t sizeInCharacters);

用法:同上,加上了最大读取字符长度

返回值:同上

详解:gets_s, _getws_s | Microsoft Docs

15.fgets()

原型:位于头文件“stdio.h”中

char *fgets(char *str, int n, FILE *stream)

用法:

#include 
int main()
{
    FILE *fp;
    char str[60];
    fp = fopen("test.txt", "r");
    fgets(str, 60, fp);
    puts(str);
    fclose(fp);
    return (0);
}
  • str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。

  • n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。

  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

返回值:如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

详解:与fgets() 和 gets() 一样,最后的回车都会从缓冲区中取出来。只不过 gets() 是取出来丢掉,而 fgets() 是取出来自己留着。 所以在使用 fgets() 的时候,如果后面要从键盘给字符变量赋值,那么同样不需要清空缓冲区。fgets函数及其用法,C语言fgets函数详解

C++

cin是什么以及cin的一些方法,请看

C++ cin 详解之终极无惑_Dablelv的博客专栏-CSDN博客_cin是什么意思

你可能感兴趣的:(C/C++,c语言,c++,开发语言)