2013-02-25 93 views
1

嗨我的程序遇到一些麻煩,當我運行它崩潰,我不得不強制它關閉,我有一些麻煩,確定是什麼導致它的任何幫助將不勝感激簡單的C程序運行時崩潰

#include <stdio.h> 

void myprint(char let, int num, int line) 
{ 
int countL=0,countT=0,numb, lin; 
char abc; 
numb=num; 
line=lin; 
abc=let; 

while(countL<lin) 
{ 
    while(countT<numb) 
    { 
     printf("%s",abc); 
     countT++; 
    } 
    printf("\n"); 
    countL++; 
} 
} 

int main(int argc, char const *argv[]) 
{ 
int times = 5, lines = 3; 
char letter = 'a'; 

myprint(letter, times, lines); 

return 0; 
} 
+2

使用調試器。它將幫助您立即找到問題。但我建議你看看循環內的'printf'調用...... – 2013-02-25 14:35:26

+3

或者只是編譯時加上警告。 – netcoder 2013-02-25 14:35:51

+0

我注意到你在內部while循環完成後不重置countT = 0。所以後面的行將沒有任何內容。不是你的崩潰的來源,但仍然認爲我會提到它。 – Rob 2013-02-25 14:38:53

回答

0

while(countL<lin)循環內,您不會重置countT變量。

1

lin沒有初始化值。

我認爲讀line=lin;行應該是lin=line

1

嘗試反轉這一初始化:

line=lin; 

lin=line; 

否則,lin是不確定的。

1
printf("%s",abc); 

打印一個字符串,abc是一個字符。

0

嘗試用

while(countT<numb) 
{ 
    printf("%c",abc); 
    countT++; 
} 
0

您正在使用printf正確更換

while(countT<numb) 
{ 
    printf("%s",abc); 
    countT++; 
} 

您傳遞的格式爲%s,這需要char*作爲參數,而不是char

3

麻煩的是,你有一個字符,並試圖將其打印出來作爲一個字符串:

printf("%s",abc); 

在C字符串是空字符\0終止字符序列。所以這printf將嘗試保持打印字符,直到它找到空字節。你的程序可能會一直試圖讀取內存,直到它找到一個壞段,然後崩潰。

你可以想做什麼,而不是你的printf只是指定一個字符:

printf("%c",abc); 

的另一個問題是,你必須在分配逆轉變量:

line=lin; 
1

問題1:

變量「lin」未正確初始化,

line = lin;

所以變量「line」和「lin」包含垃圾值。

問題2:

變化

的printf( 「%S」,ABC);

的printf( 「%C」,ABC);

as abc是char。

0

在代碼中的錯誤是SIMPLE
「行=林」是代碼的問題
這裏林未初始化的變量,因此保持垃圾值
這種垃圾值被傳遞到可變線和它擰緊了一切
我認爲正確的代碼將是lin =行
我發現另一個錯誤是printf('%s',abc);類型說明符是錯誤的,因爲abc已被聲明爲字符和類型說明符必須是%c
我還發現未使用的命令參數args和argv只能用於傳遞從命令promt運行的參數