2015-04-02 43 views
-3

該代碼的目標是,如果用戶插入大於X個字符的名稱,我會請求一個新名稱,直到插入帶有或少於X個字符的名稱。我有休耕代碼:只有使用插入的值(如果它的大小合適)

char * getName(){ 
    int size = 4; 
    int i; 
    char inserted[10]; 
    char name[4]; 
    while (size > 3){ 
     printf("Insert name, maximum 3 characters: "); 
     fgets(inserted, 10, stdin); 
     for (i=0; i<4; i++){ 
      if (inserted[i] == '\n'){ 
       size = 3; 
      } 
     } 
    } 
    sscanf(inserted,"%s", name); 
    return name; 
} 

但似乎它不工作.....我試圖調試,但無法找到錯誤。如果你能夠伸出援助之手,那就太好了。

編輯:我編輯的代碼,這是錯的

編輯:問題不在於如果返回與否的價值,但是是功能停留在一個無限循環 - 沒有按「T似乎找到如果單詞有正確的長度

+0

將'/ n''改爲''\ n''。 '/'不是轉義字符。還要注意:退出該函數後,局部變量的地址無效。 – BLUEPIXY 2015-04-02 15:46:55

+0

當它是當前代碼中的正確類型時,它似乎會逃脫循環。 – BLUEPIXY 2015-04-02 16:03:56

+0

是的,已經在工作了,謝謝 – 2015-04-02 16:11:35

回答

2

編輯:

你不能從一個函數返回一個局部變量的地址[name。您需要動態分配內存才能返回指針。您可以使用malloc()

char * name = NULL; 
name = malloc(4); 

然後,從main()你必須free()內存一旦你用它做。


老答案:

首先,你必須改變char name[3];char name[4];以騰出空間用於終止空。

在你的代碼,改變

for (i=0; i<4; i++){ 
    if (name[i] == "/n") 

for (i=0; i<4; i++){ 
    if (inserted[i] == '\n') 
+0

@BLUEPIXY對,但更嚴重的問題在那裏。首先解決這個問題。 :-) – 2015-04-02 15:26:21

+0

請再次看到代碼,我犯了一個錯誤寫它(名稱而不是插入,如你所說....) – 2015-04-02 15:31:25

+0

@luisdias的權利。你有沒有注意到我提出的其他改變? – 2015-04-02 15:32:42

0

你比較字符串字面量的字符。您應該將"\n"更改爲'\n',以便比較字符。你還要返回一個指向局部變量的指針。您應該使用malloc返回堆中分配的內存。

+0

沒有使用malloc,就像你剛纔提到的那樣改變了「」到「',但是代碼仍然不起作用。是否有任何方法來查看輸入是否少於X個字符?感謝 – 2015-04-02 15:33:56

+1

如果你擺脫了語法錯誤 - 你現在在printf之後缺少一個分號,並且使用正斜槓'/ n'而不是反斜槓'\ n'它應該可以工作(循環退出位 - 本地內存問題仍然在那裏)。 – sapensadler 2015-04-02 15:51:14

+0

感謝您的回覆,現在我只是擔心退出循環。已經嘗試使用'/ n'和'\ n',結果是相同的(無限循環)。感謝 – 2015-04-02 15:57:02

相關問題