C 语言基础学习

sancaiodm C/C++ 2021-11-07 1275 0

C语言编译系统在表示逻辑运算结果时,以数值1代表“真”, 0代表“假”,但在判断一个量是否为真时,以0代表“假”,以非0代表“真”。即将一个非零的数值认作为“真”。

 gets()、fgets()、puts()、fputs() 都是字符串处理函数,但它们都包含在 stdio.h 头文件中,并不是包含在 string.h 头文件中。


[1] fopen函数       //fopen()打开文件,fclose()关闭文件。

fopen函数的功能是打开一个文件,其调用的一般形式为:

文件指针名 = fopen(文件名,使用文件方式)。

FILE *fp;
fp=fopen("filename","r");
其意义是在当前目录下打开文件filename,只允许进行“读”操作,并使fp指向该文件。
又如:
FILE *fphzk
fphzk=fopen("c:\\hzk16","rb");
其意义是打开C驱动器磁盘的根目录下的文件hzk16,按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,
第二个表示根目录

在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,
并作相应的处理。因此常用以下程序段打开文件(假设文件路径已写入到name字符数组中):
示例1
if((fp=fopen(name,"rb"))==NULL)
{
    printf("\nerror on open %s file!",name);
    getch();
    exit(1);
}

示例2
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    FILE* fstream;
    char msg[100] = "Hello!I have read this file.";
    fstream=fopen("test.txt","at+");
    if(fstream==NULL)
    {
        printf("open file test.txt failed!\n");
        exit(1);
    }
    else
    {
        printf("open file test.txt succeed!\n");
    }
    fclose(fstream);
    return 0;
}

具体解释请参数:

c语言fopen函数

C 库函数 - fopen()

[2] feof函数

feof函数是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0

(即,文件结束:返回非0值;文件未结束:返回0值)。


[3]fgets函数

fgets()函数不适合取二进制的文件,容易发生错误。

读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,

函数调用的形式为: fgets(字符数组名,n,文件指针); 

其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'/0'。

例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。


[4]fgetc函数

fgetc()和getc()作用相同,不过在有些库中,getc()被定义为宏

fgetc()函数用于从文件流中读取一个字符,其原型为:

    int fgetc(FILE * stream);

【参数】stream为文件指针。

【返回值】成功返回读取到的字符,读到文件结尾时返回EOF。EOF是文件结束标志,值为-1。-1即为 真

读操作的位置也是由文件内部位置指针来确定,对于已经存在的文件,文件被打开时,文件内部位置指针指向文件的第一个字节。这时,调用fgetc()函数读的是第一个字节的字符,读入一个字节以后,位置指针将自动向后移动一个字节,那么再调用一次fgetc()函数,则读取的是第2个字符。连续调用该函数就可以读取文件的每个字符,并且可以使用EOF来判断是否已经到了文件末尾。

#include <stdio.h>int main (){
   FILE *fp;
   int c;
   fp = fopen("file.txt","r");
   while(1)  //非0即真,while循环读取
   {
      c = fgetc(fp);
      if( feof(fp) ) //文件结束即为 真,则结束读取操作
      { 
          break ;
      }
      printf("%c", c);
   }
   fclose(fp);
   return(0);}

[5] fputs()函数

C 库函数 int fputs(const char *str, FILE *stream) 把字符串写入到指定的流 stream 中,但不包括空字符。

下面是 fputs() 函数的声明。

fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是字符数组名,

fputs(“abcd“,fp);

--------------------------------------------

int fputs(const char *str, FILE *stream)

参数

str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。如 char str[10] = "hello\n";

stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。

返回值

该函数返回一个非负值,如果发生错误则返回 EOF。

#include <stdio.h>
int main ()
{
   FILE *fp;
   fp = fopen("file.txt", "w+");
   fputs("this is tes fputs", fp);
   fputs("add this string", fp);
   fclose(fp);
   return(0);
}
上面代码会创建文件 file.txt,它的内容如下:
this is tes fputs add this string

[6]getch():

  所在头文件:conio.h

 函数用途:从控制台读取一个字符,但不显示在屏幕上

getchar():

所在头文件:stdio.h

  getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,

  只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1.

  输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示

  有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.


[7] stdin,stdout和stderr,

这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出(standard error)。

它们都是在stdio.h中定义的。 当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出操作

#include <stdio.h>
int main ()
{
   char str[20];
   printf("请从键盘输入一个字符串 可以是任何字符串,回车确认结束");
   fgets(str,5,stdin);   //从输入流stdin中读取4个字符到字符数组str中
   fputs(str,stdout)        //将字符数组的内容输出到输出流stdout中
   return(0);
}


评论