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]);
}