日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言中重要函数

發(fā)布時(shí)間:2025/1/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中重要函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

gets函數(shù),從標(biāo)準(zhǔn)輸入讀取一行文本,一行輸入由一串字符組成,以一個(gè)換行符結(jié)尾;

gets函數(shù)丟棄換行符,并在該行的末尾存儲(chǔ)一個(gè)NUL字符(類(lèi)似‘\0’), 然后返回一個(gè)非NULL值。

當(dāng)gets函數(shù)被調(diào)用但事實(shí)上不存在輸入行時(shí),它返回NULL值。

注意點(diǎn):給字符串分配空間加NUL的空間;

格式字符串包含格式指定符(格式代碼)以及普通字符,這些普通字符將按照原樣打印出來(lái);

但每個(gè)格式指定符將使后續(xù)參數(shù)的值按照它所指定的格式打印。

%d  十進(jìn)制打印;   %g  打印浮點(diǎn)值;

%o  八進(jìn)制打印;   ? %c   打印一個(gè)字符;

%x  十六進(jìn)制打印;  %s  打印一個(gè)字符串;

scanf()函數(shù)返回值是函數(shù)成功轉(zhuǎn)換并存儲(chǔ)于參數(shù)中的值個(gè)數(shù);

perror函數(shù)以一種簡(jiǎn)單、統(tǒng)一的方式報(bào)告錯(cuò)誤,perror函數(shù)簡(jiǎn)化向用戶(hù)報(bào)告這些特定錯(cuò)誤的過(guò)程,它的原型定義于stdio.h

void perror(char? const? *message);

如果message不是NULL并且指向一個(gè)非空的字符串。perror函數(shù)就打印出這個(gè)字符串,后面跟一個(gè)分號(hào)和一個(gè)空格。

然后打印出一條用于解釋errno當(dāng)前錯(cuò)誤代碼的信息;

終止執(zhí)行:

exit函數(shù),用于終止一個(gè)程序的執(zhí)行,它的原型定義于stdlib.h

void? exit(int? status);

該函數(shù)的返回值為void;

?

就c程序而言,所有的I/O操作只是簡(jiǎn)單地從程序移進(jìn)或移出字節(jié)的事情。 因此,毫不驚奇的是,這種字節(jié)流便稱(chēng)為流(stream);

程序只需要關(guān)心創(chuàng)建正確的輸出字節(jié)數(shù)據(jù),以及正確地解釋從輸入讀取的字節(jié)數(shù)據(jù),特定I/0設(shè)備的細(xì)節(jié)對(duì)程序員是隱藏;

流分為兩種類(lèi)型:文本(text)流 和二進(jìn)制(binary)流;

stdio.h所包含的聲明之一就是FILE結(jié)構(gòu)。請(qǐng)不要把它和存儲(chǔ)于磁盤(pán)上的數(shù)據(jù)文件相混淆。

FILE是一個(gè)數(shù)據(jù)結(jié)構(gòu),用于訪問(wèn)一個(gè)流,如果你同時(shí)激活量幾個(gè)流,每個(gè)流都有一個(gè)相應(yīng)的FILE與它關(guān)聯(lián),為了流上執(zhí)行一些操作,你調(diào)用一些

合適的函數(shù),并向它們傳遞一個(gè)與這個(gè)流相關(guān)聯(lián)的FILE參數(shù);

?EOF: end of file , 它的實(shí)際值比一個(gè)字符要多幾位,這是為了避免二進(jìn)制值被錯(cuò)誤地解釋為EOF;

I/O函數(shù)以三種基本的形式處理數(shù)據(jù):單個(gè)數(shù)據(jù)、文本行、二進(jìn)制數(shù)據(jù);

對(duì)于每種形式,都有一組特定的函數(shù)對(duì)它們進(jìn)行處理。

  數(shù)據(jù)類(lèi)型    輸入    輸出    描述

  字符      getchar?  putchar?  讀取(寫(xiě)入)單個(gè)字符

  文本行    ?? gets    puts    文本行未格式化的輸入(輸出)

          scanf   printf    格式化的輸入(輸出)

  二進(jìn)制數(shù)據(jù)   fread   fwrite    讀取(寫(xiě)入)二進(jìn)制數(shù)據(jù)

字符I/O宏

  fgetc 和 fputc 是真正的函數(shù),但getc、putc、getchar 和putchar 都是通過(guò)#define 指令定義的宏;

撤銷(xiāo)字符I/O

  int ungetc(int character,?? FILE*? stream);

  功能:ungetc 把 一個(gè)先前讀入的字符返回到流中,這樣它可以在以后被重新讀入;

(應(yīng)用:假如你必須從一個(gè)流中逐個(gè)讀入一串?dāng)?shù)字,由于在實(shí)際讀入之前,你無(wú)法知道下一個(gè)字符,你必須連續(xù)讀取,直到讀入一個(gè)非數(shù)字字符,

  但是如果你不希望丟棄這個(gè)字符,那么你該怎么辦?

  使用ungetc把讀入的字符退還給流,是一個(gè)不錯(cuò)的辦法)

  “退回”字符和流的當(dāng)前位置有關(guān),所以如果 用 fseek、 fsetpos、 rewind 函數(shù)改變了流的位置, 所有退回的字符都將被丟棄;

scanf家族:

  scanf函數(shù)家族的原型如下所示,每個(gè)原型中的省略號(hào)表示一個(gè)可變長(zhǎng)度的指針列表;

從輸入轉(zhuǎn)換而來(lái)的值逐個(gè)存儲(chǔ)到這些指針參數(shù)所指向的內(nèi)存位置;

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

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

  int? sscanf(char? const *string,? char? const * format,? ... );

這些函數(shù)都從輸入源讀取字符串并根據(jù)format字符串的格式代碼對(duì)它們進(jìn)行轉(zhuǎn)換。

? fscanf的輸入源? 就是作為參數(shù)給出的流。

?scanf從標(biāo)準(zhǔn)輸入讀取,

sscanf從第1個(gè)參數(shù)所給出的字符串中讀取字符;

  對(duì)于scanf函數(shù)的參數(shù)前面為什么要加一個(gè)&符號(hào)?由于c的傳值參數(shù)傳遞機(jī)制,把一個(gè)內(nèi)存位置作為參數(shù)傳遞給函數(shù)的唯一方法是傳遞一個(gè)指向該位置的指針; 在使用scanf函數(shù)時(shí),一個(gè)非常容易出現(xiàn)的錯(cuò)誤是忘記加&符,省略這個(gè)符號(hào)將導(dǎo)致變量的值作為參數(shù)傳遞給函數(shù),

   而scanf函數(shù)(或者其它兩個(gè))卻把它解釋為一個(gè)指針,當(dāng)它被解引用時(shí),要么導(dǎo)致程序終止(試圖修改非法的地址);要么導(dǎo)致一個(gè)不可預(yù)測(cè)的內(nèi)存位置的數(shù)據(jù)被修改;

   sscanf函數(shù)說(shuō)明:int? sscanf(const char? *str,? const? char * format,? .......);

  sscanf()會(huì)將參數(shù)str的字符串(一定要是字符串), 根據(jù)參數(shù)format來(lái)轉(zhuǎn)換并將格式化數(shù)據(jù),轉(zhuǎn)換后的結(jié)果存于對(duì)應(yīng)的參數(shù)內(nèi);

返回值: 成功則返回參數(shù)數(shù)目, 失敗則返回-1;錯(cuò)誤原因存于errno中。返回0表示失敗,否則,表示正確格式化數(shù)據(jù)的個(gè)數(shù)。

  例如:sscanf(str ,?? "%d %d %s",? &i, &i2,? &s);? 如果三個(gè)均成功返回3, 如果只讀入了第一個(gè)整數(shù)到i則會(huì)返回1,證明無(wú)法從str讀入第二個(gè)整數(shù);

char input[] = "10.10.aaaaaa.bbbbbb";

sscanf(input,? "%d.%d.%5[a-z] %*s %f”,&i,&j,s,s);

printf(“%d %d %s ”,i,j,s);

執(zhí)行: 10 10 aaaaa

  常見(jiàn)用法:

    char ?str[512] = {0};

    sscanf("123456", "%s", str);
    printf("str=%s", str);

    2.取指定長(zhǎng)度的字符串。如下:

       sscanf("123456", "%4s", str);

        printf("str = %s", str); 

    3. 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串。 ?//驗(yàn)證有問(wèn)題,還是沒(méi)明白其意思呢

?

        sscanf("123456abcdedf","%[^]",str);

?

?        printf("str=%s", str);

?    4、取僅包含指定字符集的字符串,如下,取僅包含1到9和小寫(xiě)字母的字符串;

        sscanf("123456abcdedfBCDEF","%[1-9a-z]",str);

        printf("str=%s",str);

?    5、取到指定字符集為止的字符串,如下,取遇到大寫(xiě)字母為止的字符串;

        sscanf("123456abcdedfBCDEF","%[^A-Z]", str);
        printf("str=%s",str);

***************************************************************

  可以用如下代碼將字符串形式的ip地址轉(zhuǎn)換為四個(gè)整數(shù):

  • char?*?inputIp??
  • int?ip[4];??
  • sscanf_s(inputIp,?"%d.%d.%d.%d",?&ip[0],?&ip[1],&ip[2],&ip[3]); ?
  • 以下部分還沒(méi)用到:??

    注意sscanf_s,當(dāng)讀入的類(lèi)型是整數(shù)或其它長(zhǎng)度可以確定的類(lèi)型時(shí),不能在類(lèi)型后面跟上長(zhǎng)度,但是對(duì)于字符串類(lèi)型(char *)長(zhǎng)度無(wú)法得知?jiǎng)t必須在類(lèi)型后面明確指出字符串的最大長(zhǎng)度(即可以容納的空間)。舉例如下:  

    1 // crt_sscanf_s.c 2 // This program uses sscanf_s to read data items 3 // from a string named tokenstring, then displays them. 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 int main( void ) 9 { 10 char tokenstring[] = "15 12 14..."; 11 char s[81]; 12 char c; 13 int i; 14 float fp; 15 16 // Input various data from tokenstring: 17 // max 80 character string plus NULL terminator 18 sscanf_s( tokenstring, "%s", s, _countof(s) ); 19 sscanf_s( tokenstring, "%c", &c, sizeof(char) ); 20 sscanf_s( tokenstring, "%d", &i ); 21 sscanf_s( tokenstring, "%f", &fp ); 22 23 // Output the data read 24 printf_s( "String = %s\n", s ); 25 printf_s( "Character = %c\n", c ); 26 printf_s( "Integer: = %d\n", i ); 27 printf_s( "Real: = %f\n", fp ); 28 }

    對(duì)于多個(gè)字符串讀入的情況,代碼如下:

  • sscanf_s(inputString,?"%s.%s.%s.%s",?s1,?s1.length,?s2,?s2.length,?s3,?s3.length,?s4,?s4.length);??
  •  

    ?

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/chris-cp/p/3746151.html

    總結(jié)

    以上是生活随笔為你收集整理的c语言中重要函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。