❶ c語言中關於佔位的問題
整形變數佔位符就是用%d
%lf是double的佔位符
float類型變數也可以用佔位符%f,如果用%d,那列印出來的就是整形的
%i最好不用
字元 輸入數據;變元類型
d 十進制整數;int *
i 整數;int *。該整數可以是以0開頭的八進制數,也可以是以0x/0X開頭的十六進制數
o 八進制數(可以帶或不帶前導0);unsigned int *
u 無符號十進制整數;unsigned int *
x 十六進制整數(可以帶或不帶前導0x/0X);unsigned int *
c 字元;char *。按照欄位寬的大小把讀入的字元保存在指定的數組中,不加入字元'\0'。欄位寬的預設值為1。在這種情況下,不跳過空白符;如果要讀入下一個非空白符,使用%1s(數字1)
s 有非空白符組成的字元串(不包含引號);char *。該變元指針指向一個字元數組,該字元數組有足夠空間來保存該字元串以及在末尾添加的'\0'
e/f/g 浮點數;float *。float浮點數的輸入格式為:一個任選的正負號,一串可能包含小數點的數字和一個任選的指數欄位。指數欄位由字母e/E以及後跟的一個可能帶正負號的整數組成
p 用printf("%p")調用輸出的指針值;void *
n 將到目前為止此調用所讀的字元數寫入變元;int *。不讀入輸入字元。不增加轉換項目計數
[...] 用方括弧括起來的字元集中的字元來匹配輸入,以找到最長的非空字元串;char *。在末尾添加'\0'。格式[]...]表示字元集中包含字元]
[^...] 用不在方括弧里的字元集中的字元來匹配輸入,以找到最長的非空字元串;char *。在末尾添加'\0'。格式[]...]表示字元集中包含字元]
% 字面值%,不進行賦值
c99標准
❷ C語言字元串問題
1. 字元串初始化,如果逐個賦值的話,系統不一定會自動添加'\0',除非指定了長度且指定的長度大於等於你賦值的字元的個數加1,即最小為你賦值的字元個數加1。假設你指定的字元個數為n,長度為len,則系統會將剩下的(len-n)個元素都賦值為'\0',當n等於len時,不會添加任何'\0'。
之所以出現圖1的情況,是因為當前棧頂剛好等於(純粹是碰巧)'\0',假設當前棧頂為100,則有[100]='\0';,而為m_str分配內存時,棧頂要減4,因為棧設計成了先自減(即分配內存)後入棧,於是[100]='\0';[99]='P';[98]='O';[97]='T';[96]='S';m_str賦值為地址96,當前棧頂為96。當為u_str分配內存時,棧頂又要減4,於是[100]='\0';[99]='P';[98]='O';[97]='T';[96]='S';[95]='P';[94]='O';[93]='T';[92]='S';u_str賦值為地址92,當前棧頂為92。當計算m_str的長度時會從最低96開始,一直計算到99(遇到第一個'\0'前停止),所以m_str的長度為4,同理,計算u_str的長度時會從92開始,一直計算到99,所以其長度為8,從以上分析中顯然可以看出,這兩個字元串是不相等的,所以strcmp返回-1。
圖2就不用過多解釋了,手動添加了'\0',輸出自然是那樣的。又由上面對於圖1的解釋,要分析出出現圖3和圖4的原因,也是很容易的了,這里也不解釋了。
❸ C語言程序設計的佔位符問題
整形變數佔位符就是用%d
%lf是double的佔位符
float類型變數也可以用佔位符%f,如果用%d,那列印出來的就是整形的
%i最好不用
字元輸入數據;變元類型
d十進制整數;int*
i整數;int*。該整數可以是以0開頭的八進制數,也可以是以0x/0X開頭的十六進制數
o八進制數(可以帶或不帶前導0);unsignedint*
u無符號十進制整數;unsignedint*
x十六進制整數(可以帶或不帶前導0x/0X);unsignedint*
c字元;char*。按照欄位寬的大小把讀入的字元保存在指定的數組中,不加入字元''。欄位寬的預設值為1。在這種情況下,不跳過空白符;如果要讀入下一個非空白符,使用%1s(數字1)
s有非空白符組成的字元串(不包含引號);char*。該變元指針指向一個字元數組,該字元數組有足夠空間來保存該字元串以及在末尾添加的''
e/f/g浮點數;float*。float浮點數的輸入格式為:一個任選的正負號,一串可能包含小數點的數字和一個任選的指數欄位。指數欄位由字母e/E以及後跟的一個可能帶正負號的整數組成
p用printf("%p")調用輸出的指針值;void*
n將到目前為止此調用所讀的字元數寫入變元;int*。不讀入輸入字元。不增加轉換項目計數
[...]用方括弧括起來的字元集中的字元來匹配輸入,以找到最長的非空字元串;char*。在末尾添加''。格式[]...]表示字元集中包含字元]
[^...]用不在方括弧里的字元集中的字元來匹配輸入,以找到最長的非空字元串;char*。在末尾添加''。格式[]...]表示字元集中包含字元]
%字面值%,不進行賦值
c99標准
❹ c語言關於字元串分配空間的問題
要實現動態內存的分配,除了利用含指針成員的結構體之外,還需利用C語言提供的幾個標准庫函數。(使用時應包含頭文件「alloc.h」或「malloc.h」或「stdlib.h」)
1.malloc函數
函數原型為void *malloc(unsigned int size);在內存的動態存儲區中分配一塊長度為"size" 位元組的連續區域。函數的返回值為該區域的首地址。 「類型說明符」表示把該區域用於何種數據類型。(類型說明符*)表示把返回值強制轉換為該類型指針。「size」是一個無符號數。例如: pc=(char *) malloc (100); 表示分配100個位元組的內存空間,並強制轉換為字元數組類型,函數的返回值為指向該字元數組的指針, 把該指針賦予指針變數pc。若size超出可用空間,則返回空指針值NULL。
2.calloc 函數
函數原型為void *calloc(unsigned int num, unsigned int size)
按所給數據個數和每個數據所佔位元組數開辟存儲空間。其中num為數據個數,size為每個數據所佔位元組數,故開辟的總位元組數為 num*size。函數返回該存儲區的起始地址。calloc函數與malloc 函數的區別僅在於一次可以分配n塊區域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu類型,並把其首地址賦予指針變數ps。
3. realloc函數:
函數原型為void *realloc(void *ptr, unsigned int size)
重新定義所開辟內存空間的大小。其中ptr所指的內存空間是用前述函數已開辟的,size為新的空間大小,其值可比原來大或小。函數返回新存儲區的起始地 址(該地址可能與以前的地址不同)。例如p1=(float *)realloc(p1,16);將原先開辟的8個位元組調整為16個位元組。
❺ c語言 字元串排列問題
/*
abc 3
123 2
def 1
222 1
dec 1
Press any key to continue
*/
#include<stdio.h>
#include<string.h>
typedefstructtag{
charstr[10];
inttimes;
}data;
voidSort(dataa[],intn){
inti,j,k;
datatmp;
for(i=0;i<n-1;++i){
k=i;
for(j=i+1;j<n;++j){
if(a[k].times<a[j].times)
k=j;
}
if(k!=i){
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}
}
}
intHasNo(dataa[],intn,chars[]){
inti;
for(i=0;i<n;++i){
if(strcmp(a[i].str,s)==0)
returni;
}
return-1;
}
intmain(){
chars[]="abcdefabc123222123abcdecdef";
dataa[50]={{0,0}};
chart[10];
inti=0,j=0,n=0,res;
do{
if(s[i]==''){
t[j]='