❶ c語言helloworld代碼是對的,但編譯錯誤
寫c語言的時候,如果代碼沒錯,這只能說明語法沒有出錯,直接導致的結果就是能編譯通過,並不意味著執行的結果就是正確的。影響c語言代碼執行結果的因素非常多。
一、指針的不正確運用;
二、變數精度問題。char,int,unsigned int,long ,float等,如果變數精度使用不正確,也會影響運算結果;
三、運算符的應用不正確。例如除,取余的區別;
四、正負符號位;
五、運算符的優先順序使用;
六、編譯器不同。各種編譯器也可能造成結果不一致;
C語言雖然是一門比較簡單的語言,但是要掌握這些細節,其實並不容易。
❷ C語言編譯總是提示我錯誤怎麼回事啊倒數第二行!
給你改下吧
第一,頭文件聲明了兩次
第二、主函數用了兩次
去掉就行了,很簡單
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello,My Computer!\n");
system("PAUSE");
return 0;
}
❸ 求助~關於這個程序,編譯出錯誤,不知道怎麼改,我C++不好。
錯誤1 for(int i=1;i<45;i++) cout<<prezname[i]<<endl; 後者的i是未定義的,因為i只在for循環內有效。是個局部變數,你在外部引用編譯器就當做你沒定義
錯誤2 found,where是局部變數,如果你要在全局中請定義全局變數,而且where是關鍵字,是不能用做變數名的。
錯誤3 所有東西要先定義後使用,你在void insertion(prezname keyname)函數中調用binsearch函數時沒在之前定義,建議把你需要調用的函數卸載你調用之間,這樣免去聲明環節。
錯誤4 void deletion(prezname keyname)
{
bool found
binsearch(keyname,found,where)
中的分號哪裡去了。
先改改吧,不行再問吧,祝你好運!
❹ C語言:下面的代碼為什麼會出現編譯錯誤應當怎麼改正
錯誤出在a=sum;這一句——因為構成C語言程序的基本單位是函數而不是C語句,這里的a=sum;不在任何函數中,所以編譯器無法處理而出錯。把它放到主函數中的printf("%d ",a(3,5));之前就可以了。函數外只能進行全局變數定義或聲明,而不能進行其他操作,所以把int (*a)(int, int); a=sum;兩句改成int (*a)(int, int)=sum;,讓它成為聲明變數a並初始化為sum也是可以的。你可以試試。
代碼文本:
#include "stdio.h"
int sum(int a, int b);
int (*a)(int, int);
int main(int argc,char *argv[]){
a=sum;
printf("%d ",a(3,5));
return 0;
}
int sum(int a,int b){
return a+b;
}
❺ glutInit(&argc, argv);編譯錯誤
這個我不是很清楚,我用vs2010編譯是可以的,也同樣可以運行顯示。你可以換個編譯器試試,看可不可以。這只是建議。
❻ C語言中argc與argv怎麼用為什麼我初始化argc時候老是出錯
argc與argv[]是啟動C程序時系統傳入的,可以直接使用。argc是參數數量,argv是參數表數組。如命令行為「prg.exe 1 2 3」,則argc為4,argv[0]="prg.exe",argv[1]="1",argv[2]="2",argv[3]="3"。以下是LCC-WIN32模板文件(加了一行顯示所有參數語句):
/* --- The following code comes from e:\lcc\lib\wizard\textmode.tpl. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Usage(char *programName)
{
fprintf(stderr,"%s usage:\n",programName);
/* Modify here to add your usage message when the program is
* called without arguments */
}
/* returns the index of the first argument that is not an option; i.e.
does not start with a dash or a slash
*/
int HandleOptions(int argc,char *argv[])
{
int i,firstnonoption=0;
for (i=1; i< argc;i++) {
if (argv[i][0] == '/' || argv[i][0] == '-') {
switch (argv[i][1]) {
/* An argument -? means help is requested */
case '?':
Usage(argv[0]);
break;
case 'h':
case 'H':
if (!stricmp(argv[i]+1,"help")) {
Usage(argv[0]);
break;
}
/* If the option -h means anything else
* in your application add code here
* Note: this falls through to the default
* to print an "unknow option" message
*/
/* add your option switches here */
default:
fprintf(stderr,"unknown option %s\n",argv[i]);
break;
}
}
else {
firstnonoption = i;
break;
}
}
return firstnonoption;
}
int main(int argc,char *argv[])
{
if (argc == 1) {
/* If no arguments we call the Usage routine and exit */
Usage(argv[0]);
return 1;
}
/* handle the program options */
HandleOptions(argc,argv);
/* The code of your application goes here */
for (int i=0;i<argc;i++)printf("%s ",argv[i]);
return 0;
}
❼ 為什麼相同的代碼 加上 「int argc, char *argv[]」反而出現錯誤 高級問題(我是這么覺得)
對程序員來說,main函數是程序的入口點,但是對編譯器來說,需要增加附加的初始化代碼來處理和操作系統環境有關的東西,諸如命令行參數等,然後再調用main進入用戶編寫的代碼,按照約定,在調用main之前,初始化代碼會按照main(int argc, char* argv[])的參數形式將argc,argv放入堆棧,供main中的代碼調用。如果main定義成其它參數形式,雖然語法是沒有問題,但可能得不到正確的參數。
比如,以下的參數形式多數的編譯器能夠編譯通過
int main() //不需要處理傳入參數
int main(int argc) //argc傳入參數個數
int main(int argc,char *argv[]) //argc傳入參數個數,argv傳入命令行字元串數組
int main(int argc, int p) //雖然p定義成整型,但實際傳入的仍是命令行字元串數組指針。
int main(int argc, char *argv[], int u) //多了個參數u,前面2項沒問題,但對u的存取可能會破壞堆棧。
❽ C++的argc和argv的問題 編譯成功但是為什麼雙擊運行報錯 在cmd下卻可以正常運行代碼如下
這是由於你直接運行時,傳入的參數只有一個,所以指針錯誤,訪問了野指針。
修改後:
#include<stdio.h>
int main(int argc, char *argv[])
{
char *u = argv[1], *p = argv[2];
int i;
if(argc<2)// 這里判斷一下就好了。
return 0;
for(i=1;i<argc;i++)
printf("%s\n",argv[i]);
printf("獲取第1個參數是%s\n",u);
printf("獲取第2個參數是%s\n",p);
return 0;
}
❾ if(-1 == argc) 是什麼情況
-1 == argc 這是一個關系表達式,判斷argc是否與 -1 相等
那為什麼不寫成 argc == -1呢
因為,如果,按照 argc==-1,效果一樣,但如果不小心寫成 argc = -1 變成一個賦值,顯然
會出現語義上的錯誤,但編譯器是不檢查語義錯誤的。這樣,顯然得不到想要的結果。
但 你這樣寫 -1 == argc,如果,你不小心寫成 -1 = argc,這是語法錯誤,編譯器會幫你檢查到出現了錯誤。以此利用編譯器來幫你避免錯誤。