C/常用函數
< C
←回到C
標準I/O
編輯stdio.h中的常用函數。
printf
編輯轉換說明符
轉換說明符 | 意義 | 實例 | 輸出 |
---|---|---|---|
%a | 浮點數、十六進制數字和p-記數法(C99) | ||
%A | 浮點數、十六進制數字和P-記數法(C99) | ||
%c | 單個字符 | ||
%d | 有符號十進制數 | ||
%e | 浮點數、e-記數法 | ||
%E | 浮點數、E-記數法 | ||
%f | 浮點數、十進制記數法 | ||
%g | 根據數值不同自動選擇%f或%e;%e格式在指數小於-4或者大於等於精度時使用 | ||
%G | 根據數值不同自動選擇%f或%E;%E格式在指數小於-4或者大於等於精度時使用 | ||
%i | 有符號十進制整數(與%d相同) | ||
%o | 無符號八進制整數 | ||
%p | 指針 | ||
%s | 字符串 | ||
%u | 無符號十進制整數 | ||
%x | 使用十六進制數字(字母小寫)的無符號十六進制整數 | ||
%X | 使用十六進制數字(字母大寫)的無符號十六進制整數 | ||
%% | 打印百分號 |
修飾符
修飾符 | 意義 | 實例 | 輸出 |
---|---|---|---|
+/- | 修飾數字修飾符,表示正負 | ||
空格 | |||
# | |||
數字 | 整數部分表示最小字段寬度,小數部分表示精度 | ||
h | 表示short,修飾整數表示有符號或無符號短整型 | ||
hh | 表示short short,修飾整數表示有符號或無符號char型 | ||
j | 修飾整數表示intmax_t或uintmax_t值 | ||
l | 表示long,修飾整數表示有符號或無符號長整型 | ||
ll | 表示long long,修飾整數表示有符號或無符號長長整型 | ||
L | 表示long,修飾浮點數表示long double值 | ||
t | 修飾整數表示一個ptrdiff_t值(C99) | ||
z | 修飾整數表示一個size_t值(C99) |
scanf
編輯#include <stdio.h>
int main(){
int a,b,c;
printf("input a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
getchar
編輯int getchar(void)
{
static char buf[BUFSIZ];
static char* bb = buf;
static int n = 0;
if ( n == 0 )
{
n = read(0, buf, BUFSIZ);
bb = buf;
}
return(--n >= 0) ? (unsigned char)*bb++ : EOF;
}
putchar
編輯gets
編輯puts
編輯puts()函數將一串字符串輸出後換行。
#include <stdio.h>
int main(int argc, char* argv[])
{
char str[] = "We are same.";
puts(str);
printf("%s\n", str );//该语句与上一条语句等效。
}
數學
編輯math.h中的常用函數。
記憶體
編輯realloc
編輯#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
char *s=NULL, *s_new=NULL;
int i;
s=(char*)malloc( 32 );
bzero( s, 32 );
strcpy( s, "Hello! world" );
for(i=0;i<100;++i) {
s_new=(char*)realloc( s, (1+i)*1024 );
s=s_new;
strcat( s, " 01234567890");
printf("%d %s\n", i, s );
}
free( s );
}
型態轉換
編輯atoi
編輯#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
char str[] = "100"; /* 宣告字串 */
printf("%d\n", atoi( str ) ); /* 轉換字串為數值, 同理可證 atol, atoll, atof */
}
字串處理
編輯sprintf
編輯int sprintf ( char* str, const char* format, ... );
可以將輸出的字串存取至另一個字串
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[])
{
char buffer[50];
const char str[] = "Jack";
int n;
// 輸出 "Hello, my best friend, Jack"
// 同時將輸出結果存至 buffer,n 值設為 28
n = sprintf(buffer, "Hello, my best friend, %s.", str);
// 輸出 "[Hello, my best friend, Jack] has 28 characters."
printf("[%s] has %d characters.", buffer, n);
return 0;
}
sscanf
編輯strcmp
編輯int strcmp ( const char* str1, const char* str2 );
比較 str1 與 str2 兩字串,若完全相等,則回傳 0。若不相等,則傳回非 0 之值。
#include <stdio.h>
#include <string.h>
int main( int argc, char* argv[] )
{
// 在 ACSII 中,A 的值(65)小於 B 的值(66),故回傳小於 0 的值
// 輸出 "strcmp(AA,BB) = -1"
printf("strcmp(AA,BB) = %d\n", strcmp( "AA", "BB" ) );
// 輸出 "strcmp(BB,AA) = 1"
printf("strcmp(BB,AA) = %d\n", strcmp( "BB", "AA" ) );
// 輸出 "strcmp(CC,CC) = 0"
printf("strcmp(CC,CC) = %d\n", strcmp( "CC", "CC" ) );
return 0;
}
strcpy
編輯strcat
編輯strlen
編輯strlen()函數返回一個記錄字符串長度(不計入字符串結束符『\0』)的整數。
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[])
{
char str[] = "Length";
printf("%d\n", strlen(str) );//输出6
}
演算法
編輯qsort
編輯標準C函式庫有內建Quick sort演算法,使用時,需傳入比較函數,讓qsort()能作比較。
#include <stdio.h>
#include <stdlib.h>
#define nmemb 7
int compare( const void *a, const void*b ) {
int *aa=(int*)a, *bb=(int*)b;
if(*aa>*bb) return 1;
if(*aa==*bb) return 0;
if(*aa<*bb) return -1;
}
int main(int argc, char* argv[]){
int base[nmemb]={ 3, 102, 5, -2, 98, 52, 18};
int i;
printf("Original...\n");
for(i=0;i<nmemb;++i)
printf("%d \n", base[i]);
qsort( base, nmemb, sizeof(int), compare );
printf("after qsort...\n");
for(i=0;i<nmemb;++i)
printf("%d \n", base[i]);
}