當前位置:首頁 » 編程語言 » c程序設計語言錯誤
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c程序設計語言錯誤

發布時間: 2022-09-11 19:07:04

㈠ 編程c語言總是有一個錯誤

執行 cl.exe 時出錯
這種錯誤一般是由於環境變數設置出錯導致的,參見網上的各種教程

http://blog.csdn.net/hongloumengyan/article/details/6112272

實在不會就重裝一遍,安裝在默認路徑里一般就不會有這個問題了

㈡ 人民郵電出版社出版的c語言程序設計中的錯誤有哪些

1. 書寫標識符時,忽略了大小寫字母的區別。
int main( void )
{
int a = 5;
printf( "%d", A );

return 0;
}
編譯器認為 a 和 A 是兩個不同的變數名,而顯示出錯信息。C 語言規定大寫字母和小寫字母是不同的字元;而有些編程語言是不分大小寫的。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。

2. 忽略了變數的類型,進行了不合法的運算。
int main( void )
{
float a, b;
printf( "%d", a % b );

return 0;
}
% 是求余運算符,a % b 的結果是 a 除以 b 的余數。只有 % 左右兩邊的操作數都是整型時,才可以進行求余運算。故而上面的程序是錯誤的,因為 a 和 b 是浮點型變數。

3. 將字元常量與字元串常量混淆。
char c;
c = "a";
這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C 語言規定以 \0
作字元串常量的結束標志,它是由系統自動加上的,所以 "a" 實際上包含兩個字元:'a' 和 '\0'。所以把 "a" 賦給字元變數是不行的。

4. 忽略了「=」與「==」的區別。
許多高級語言都使用「=」符號作為關系運算符的「等於」。如 BASIC 程序中可以寫:
if ( a = 3 ) then …
但 C 語言中,「=」是賦值運算符,「==」才是關系運算符。如:
if (a == 3)
a = b;
a == 3 是比較 a 是否等於 3;而 a = b; 表示把 b 的值賦給 a。初學者往往會把 a == 3 錯寫成 a = 3,這樣寫是符合語法的,但是不符合我們的期望。如果錯寫成了 a = 3,有些編譯器會給出警告。

5. 忘記加分號。
分號是 C 語句中不可缺少的一部分,語句末尾必須有分號。
a = 1
b = 2;
編譯時,編譯器發現「a = 1」後面沒有分號,就會報錯。改錯時,如果在編譯器所說的有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。

6. 多加分號。
{
z = x + y;
t = z / 100;
printf( "%f", t );
};
上面代碼中,大括弧 } 後面的分號(;)是毫無必要的!因為單獨一個 ; 也是合法的 C 語言語句,所以 } 後面寫了 ; 也是合法的,但是毫無必要!又如:
if ( a % 3 == 0 );
i++;
程序員的本意是如果 3 整除 a,則 i 加 1。但由於 if ( a % 3 == 0 ) 後加了分號,則 if 語句到此結束。不論 3 是否整除 a,程序都會執行 i++; 語句。再如:
for ( i = 0; i < 5; i++ ) ;
{
scanf( "%d", &x );
printf( "%d", x );
}
程序員的本意是先後輸入 5 個數,每輸入一個數後再將它輸出。但由於for () 後加了一個分號,循環體變為空語句 ; 。空語句 ; 執行 5 次後,下面的程序塊才開始執行,導致的結果是只能輸入一個數並輸出它。

7. 使用 scanf 函數時忘記加取址運算符「&」。
int a, b;
scanf( "%d %d", a, b );
這樣寫是錯誤的!應該改成 scanf( "%d %d", &a, &b );

8. 輸入數據的方式與要求不符。
scanf( "%d %d", &a, &b );
輸入時,不能用逗號作兩個數據間的分隔符。例如:3, 4 。而要使用空格、回車或者 tab 鍵作為分隔符。例如:3 4 。如果我們想用逗號(,)來做分隔符,可以這樣寫:
scanf( "%d,%d", &a, &b );
此時不用逗號而用空格或其它字元是不對的。例如:3:4 。又如:
scanf("a=%d,b=%d",&a,&b);
輸入應如以下形式:
a=3,b=4

9. 輸出的數據類型與所用格式說明符不一致。
例如,a 定義為整型,b 定義為浮點型
int a = 3;
float b = 4.5;
printf( "%f%d\n", a, b );
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。應該改成:
printf( "%d%f\n", a, b );

10. 輸入數據時,企圖規定精度。
scanf( "%7.2f", &a );
這樣做是不合法的,輸入數據時不能規定精度。

11. switch 語句中漏寫 break 語句。
例如:根據考試成績的等級列印出百分制數段。
switch ( grade ) {
case 'A':
printf( "85~100\n" );
case 'B':
printf( "70~84\n" );
case 'C':
printf( "60~69\n" );
case 'D':
printf( "<60\n" );
default:
printf( "error\n" );
由於漏寫了 break 語句,當 grade 值為 A 時,printf 函數在執行完第一個語句後會接著執行第二、三、四、五個 printf 函數語句。正確寫法應在每個分支後再加上「break;」。例如:
case 'A':
printf( "85~100\n" );
break;

12. 忽視了 while 和 do-while 語句在細節上的區別。
(1) int main( void )
{
int a = 0, i;

scanf( "%d", &i );
while ( i <= 10 ) {
a += i;
++i;
}
printf( "%d", a );

return 0;
}

(2) int main( void )
{
int a = 0, i;

scanf( "%d", &i );
do {
a += i;
++i;
} while ( i <= 10 );
printf( "%d", a );

return 0;
}
可以看到,當輸入 i 的值小於或等於 10 時,二者得到的結果相同。而當 i>10 時,二者結果就不同了。因為 while
循環是先判斷後執行,而 do-while 循環是先執行後判斷。對於大於 10 的數 while 循環的循環體一次也不執行,而 do-while
語句則要執行一次。

13. 定義數組時誤用變數。
int n = 6;
int a[n];
C99 以前,數組名後用方括弧括起來必須是常量,包括常量表達式。但是在最新的 C99 標准中,上面的代碼是正確無誤的。如果您的編譯器不支持 C99 ,那麼上面的代碼不能通過編譯。

14. 在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。
int main( void )
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

printf( "%d", a[10] );

return 0;
}
C 語言規定:定義時如果用 a[10],則表示數組 a 有 10 個元素,其下標值范圍為0到9。a[10]不屬於上面定義的數組中。對 a[10] 進行賦值可能導致程序崩潰!

15. 在不應加地址運算符 & 的位置加了地址運算符。
char s[100];
scanf( "%99s", &s );
C 語言中,數組名代表該數組的起始地址。因此上面的代碼中,s 本身就已經是一個地址了,我們不需要再對它進行取址運算。正確的寫法應該是:scanf( "%99s", s );

㈢ 在C語言編程中,出現如下的錯誤「expected initializer before "int"怎樣解決

這種信息只是告訴你在這行 int 以前有語法錯誤,重新檢查編輯即可。

㈣ C語言程序設計語法錯誤問題

#include<stdio.h>

int main()

{

int data1,data2,data3;

scanf("%d%d",&data1,&data2);/*這里冒號里("")應該只包括佔位符(%d);你定義的是(int)dat(e)2,但是取值的是dat(a)2;還有既然你要求值的是data3,他就不能在輸入函數scanf()中出現;因為他是要被輸出地的; */

data3=data1*data2;

printf("data3=%d",data3); /*data3應在輸出函數printf()中,因此他不能出現在上面的函數中;*/

return 0;

}

㈤ C語言 編程後,有錯誤,怎麼查看是那部分出錯了!

【編寫完代碼後直接編譯,如果有錯誤,編譯器會自動彈出提示的】

例子如下:

(5)c程序設計語言錯誤擴展閱讀:

C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。

C語言適用范圍大。適合於多種操作系統,如Windows、DOS、UNIX、LINUX等等;也適用於多種機型。C語言對編寫需要硬體進行操作的場合,明顯優於其它高級語言,有一些大型應用軟體也是用C語言編寫的。

㈥ 關於C語言編程時的錯誤

我已經測試了,主要是語法錯誤。在VC++6.0中編譯階段就能得到錯誤信息。要保證代碼正確性,首先代碼格式要良好,這樣才容易找出錯誤。
{a[0].score=a[2].score;j=2;}};這句最後的};是多餘的。
還有一個邏輯問題。學生姓名是字元串類型,最後一句輸出時你卻用%c,顯然應當用%s,並且將a[j].name[20]修改為a[j].name
最後一個建議:最後一句輸出也加上\n

㈦ C語言編程錯誤

#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#defineNUM200
voidinput();
voidrecord();
voidfind();
voidmodify();
intnow_no=0;
structClient
{
charname[20];
intsex;//性別,0表示男,1表示女
intage;
charID_card[20];
intyear;
intmonth;
intdate;
intRoom_ID;
intTel;
intPrice;
charSign[10];
}
Room[NUM];
intmain()
{
intas;
start:printf(" 歡迎使用客房服務系統 ");
do
{
printf(" 1.錄入賓客信息 2.客房數,某一天的客房數的統計 3.查詢賓客信息 x4.修改賓客信息 5.退出 ");
printf(" 選擇功能選項");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
//case1:system("cls");input();break;
//case2:system("cls");record;break;
//case3:system("cls");find;break;
//case4:system("cls");modify;break;
//case5:system("exit");exit(0);
default:system("cls");gotostart;
}

}while(1);
}

㈧ c語言程序設計錯誤解答

你的演算法有問題
你的程序是讓兩個數從2開始除,(這里的除實際上是求模運算,為了方便解釋就先說成除吧)
直到被除數大於或等於這兩個數中最小的一個才停止循環
比如你的28,13
是循環到i=13時停止的,並且你的循環范圍也有問題,輸出會出錯
你可以讓這兩個數從它們之中較小的一個開始除,第一次兩個數除後都為0的話就停止循環,得到最大公約數
程序修改如下:
#include<stdio.h>
#include<math.h>
void
main()
{
int
m,n,i,p,max,q,min;
scanf("%d,%d",&m,&n);
if(m>n)
p=n;
else
p=m;
for(i=p;i>0;i--)
if
(m%i==0&&n%i==0)
{
max=i;
break;
}
min=m*n/max;
printf("max=%d
",max);
printf("min=%d
",min);
}

㈨ C語言程序設計,顯示一個錯誤,不知道咋改,求大佬幫忙

報錯的原因是:程序執行錯誤的一行時,不知道fun是什麼,因為fun函數是在這一行後面定義的。

兩種改法:

  1. 把 fun 函數的定義放在 main 函數之前

  2. 在 main 函數之前聲明 fun 函數,也就是在 #include<stdio.h>下面一行加上

double fun(int m);

即可。

㈩ C語言程序設計語法錯誤題

#include<stdio.h>

int main()

{

int data1,data2,data3;

printf("please input 2 number:");

scanf("%d%d",&data1,&data2);/*這里冒號里("")應該只包括佔位符(%d);你定義的是(int)dat(e)2,但是取值的是dat(a)2;還有既然你要求值的是data3,他就不能在輸入函數scanf()中出現;因為他是要被輸出地的; */

data3=data1*data2;//這沒錯,有時候錯誤在紅色區域的上面或下面;

printf("data3=%d",data3); /*data3應在輸出函數printf()中,因此他不能出現在上面的函數中;*/

return 0;

}


我看到兩個這種類型的題,是同一個人嗎;不管了,錯類型一樣,我直接粘過來了;希望能幫到你,望採納;