① C語言 程序檢測
大概原因是在用mallc申請了存儲空間後所返回的指針在之後的操作中使所返回的指針的指向發生了變化,例如:
*sp = (char *)malloc (10*sizeof(int));
while (*sp != '/0'){
c = *sp ++;
fputc(c,fp);
}
free(sp);
這樣對sp進行操作以後,使sp的指向發生了變化,在運行時就會出現free invalid pointer的錯誤
解決辦法很簡單(可能有點幼稚,如果高手有更好的方法,請指教)
在對sp malloc以後申明一個char *p;的指針,用於保存sp的指向,如下:
char *p;
p = sp;
而後在while操作完成後,free之前將p重新賦給sp就可以了
sp = p;
最後free就不會有問題了
因為你沒把原碼貼出來,所以只能舉例來說了,希望對你有幫助
② C語言代碼 求測試
Mac下測試,故清屏系統調用無效,所以一下為未清屏的效果。
功能測試結果:
Please input :
A:Scissor
B:Stone
C:Paper
D:Exit
a
Computer:Paper
You:Scissor
sh: pause: command not found
You win!Please input :
A:Scissor
B:Stone
C:Paper
D:Exit
b
Computer:Scissor
You:Stone
sh: pause: command not found
You win!Please input :
A:Scissor
B:Stone
C:Paper
D:Exit
c
Computer:Paper
You:Paper
sh: pause: command not found
drawPlease input :
A:Scissor
B:Stone
C:Paper
D:Exit
d
Program ended with exit code: 0
③ C語言的問題為什麼結果是0;0 程序代碼如下
原因:在函數countValue()中重定義了變數cnt,sum,這樣這兩個變數在函數countValue()中稱為了局部變數,它們的作用域是這個函數內部,與主函數中的cnt和sum沒有任何關系,所以最後輸出的值為0,應該把函數countValue()中對cnt和sum的定義去掉即可:
void
countValue()
{int
i,j,k=1;
for(i=800;i>500;i--)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j==i)
{
cnt++;
sum=sum+k*i;
k=k*(-1);
}
}
}
④ c語言 出現的#if 0 表示什麼
c語言 出現的#if 0 是預編譯指令,表示之後的代碼不執行。
C語言中預編譯指令#if、#else和#endif指令一般配合使用。#if 後面的參數為真(非0)則執行#if 後面的模塊。#if 後面的參數為假,則不執行#if 後面的模塊。
此指令多用在調試的時候,有段代碼不想刪除,怕後面用到所以用 #if 0 來暫時注釋掉,如果想用的話就用#if 1 來開啟;例如: #if true 執行 #endif #if false 跳過 #endif。
(4)c語言過零檢測代碼擴展閱讀:
常見的預編譯指令有:
一、#include 指令
該指令指示編譯器將xxx.xxx文件的全部內容插入此處。若用<>括起文件則在系統的INCLUDE目錄中尋找文件,若用" "括起文件則在當前目錄中尋找文件。一般來說,該文件是後綴名為"h"或"hpp"的頭文件。
二、#define指令有三種用法:
1、第一種是定義標識,標識有效范圍為本翻譯單元本指令之後,形如#define XXX,常與#if配合使用;
2、第二種是定義常數,如#define max 100,則max代表100;
3、第三種是定義"函數",如#define get_max(a, b) ((a)>(b)?(a):(b)) 則以後使用get_max(x,y)就可以得到x和y中較大的數(這種方法存在一些弊病,見注2)。
⑤ 在這段C語言代碼中,加入判斷成績是否在0-100之間,如果不在,重新輸入,請問怎麼實現
void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 將指針置於最末尾 */
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
do
{printf("請你輸入c語言成績:");
scanf("%d",&p->data.cgrade);
getchar();
}while(p->data.cgrade<0||p->data.cgrade>100);
do
{printf("請你輸入數學成績:");
scanf("%d",&p->data.mgrade);
getchar();
}while(p->data.cgrade<0||p->data.cgrade>100);
do
{printf("請你輸入英語成績:");
scanf("%d",&p->data.egrade);
getchar();
}while(p->data.cgrade<0||p->data.cgrade>100);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息輸入已經完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
⑥ C語言這個簡單的代碼輸出全是0!
把後面那個雙引號移到n後面去
⑦ c語言實現 交流正弦波的過零檢測
過零檢測要用硬體實現。
我沒有用過stm32f4xx,如果上面有比較器,可以直接使用比較器,比較器能中斷,就用比較器的中斷功能實現。
如果沒有內置比較器,可以外接比較器,比較器輸出接點平變化中斷,通過中斷來實現脈沖接收、發送功能。
如果對過零比較的相位要求不是很高,可以使用一個三極體做過零比較器。正半周三極體導通,負半周三極體截止。
具體的,看你硬體設計使用的哪三個引腳。
⑧ 求 過零檢測程序!!C語言。。。。。控制可控硅的
你要之處實用單片機還是DSP的這樣才能編程啊
⑨ 過零檢測信號是怎麼用單片機C語言程序反應的
過零檢測?是對信號脈沖的檢測吧?可以使用外部中斷
設置為跳沿觸發,開外部中斷即可