2014-03-01 21 views
0

這裏是我的代碼:在C滌棉自動換行

void fun1(char data[2][10]);//function prototype 
int i, j; char data[2][11];//variables 
for (i = 0; i < 2; i++)//populating the 2D array of chars 
{    
    for (j = 0; j < 11; j++) 
    { 
     scanf("%c", &data[i][j]); 
    } 
} 

fun1(data); 

void fun1(char data[2][10])//function to print the array out 
{ 
    int i, j, sum; 
    printf("\n"); 
    for (i = 0; i < 2; i++) 
    { 
     for (j = 0; j < 11; j++) 
     { 
      printf("%c", data[i][j]); 
     } 
    } 
} 

這是我的輸入和輸出:

(inputs) 

aaabbbccce 
aaabbbccce 

(outputs) 

aaabbbccce 

aaabbbccce 

我的問題是爲什麼會出現在輸出新行尚未指定時,我一? 順便說一句,如果我的函數參數不匹配我的數組的大小,那麼可以嗎?就像我的數組是char數據[2] [11],我傳入的參數是char數據[2] [10]。

+0

當你給它你輸入你或許按Enter鍵鍵入'aaabbbccce'後? – lurker

+0

是我輸入:aaabbbccce(輸入)aaabbbccce(輸入) – mib1413456

+2

當你輸入「輸入」您指定一個換行符。 Enter =換行符。 – lurker

回答

4
  1. 更改所有這些 '11' 至 '10'

    您declareed fun1()作爲void fun1(char data[][10]),但給它char [][11]類型的參數。

  2. 變化scanf("%c", ...)scanf(" %c", ...)

    空間%之前會忽略空白字符,如換行,在你的輸入。

    你輸入

    aaabbbccce(enter) 
    aaabbbccce(enter) 
    

    包括22個字符,而不是21分的。第一個'e'之後的(輸入)應該被忽略。

    如果使用scanf("%c", ...)讀取輸入,你應該給一個輸入像

    aaabbbccceaaabbbccce(enter) 
    

    到您的程序。

+0

的感謝!這工作! – mib1413456

0

您應該更正爲11至10 環路限制你應該這樣做在兩者的功能。但在fun1()中做到這一點就足夠了。

+0

好吧,我試過這個,它打印出aaabbbccce aaabbbccc最後的'e'缺失 – mib1413456

+0

在fun1()中i變量的循環內部添加一個printf(「\ n」)後面的j變量的嵌套循環。 應該這樣做。 你是否改變了這兩個函數的限制? –

+0

是的,我改變了它在FUN1和填充陣列 – mib1413456

0

我不認爲如果你的函數參數不匹配數組大小,至少你不會得到你想要的。 我們知道,當您使用數組作爲參數,其實調用函數傳遞它的數組的第一個地址(又名數組變量名)被調用函數和調用函數接收到第一地址作爲參數的地址,所以無論是參數共享相同的內存。 C允許這樣做,但您可能會看到警告消息。