2015-12-28 24 views
-3

1.實際上我想先給出一個數字N(我想輸入的字符串的數量)作爲輸入,然後在下一行使用gets()的字符串,但是當我按Enter鍵時,沒有。字符串我可以進入的是用printf(「\ n」)N-1.I嘗試,但它並沒有work.Please有人可以幫助我在this.eg:用C語言編程涉及字符串

//code 
    int N,i,arr[N]; 
    char str[50]; 
    scanf("%d",&N) //no. of strings required 
    for(i=0;i<N;i++) 
    { 
     gets(str); 
     arr[i]=strlen(a); 
    } 
    for(i=0;i<N;i++) 
    { 
     printf("%d\n",arr[i]); 
    } 

我想進入我的輸入是這樣的:

2 //no. of strings 
    ABCFD //string 1 
    ASWD //string 2 
    //But actually what i am getting using printf("\n") 

輸出:

5 
    4 

但什麼我得到:

2 
    //blank space 
    ASWD //string 2 

和輸出

0 
    4 
+3

發佈您的代碼,所以我們可以看看它。 – nicomp

+2

請一直顯示您的研究成果。請先閱讀[問]頁面。 –

+0

歡迎來到StackOverflow。當你的問題被低估時,不要失望。請記住,其他想要回答的人需要足夠的信息。閱讀http://stackoverflow.com/help/how-to-ask瞭解更多詳情。在這種情況下,提供一個最小代碼示例。 – harper

回答

1

N仍有輸入值後輸入緩衝區中有一個newline,後面的gets將其接受爲空白輸入。無論如何gets是一個已棄用的功能:請使用像這樣的fgets。我打印了每個條目以顯示每個條目末尾有一個newline,並刪除了該換行符。

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    int N, i; 
    char str[50]; 
    printf("Enter number of cases\n"); 
    scanf("%d%*c", &N);         // read newline too, but discard 
    for(i=0; i<N; i++) 
    { 
     printf("\nEnter string\n"); 
     if (fgets(str, sizeof str, stdin) == NULL) 
      return 1; 
     printf("Shows newline >>%s<<\n", str);   // show that newline is retained 
     str [ strcspn(str, "\r\n") ] = 0;    // remove trailing newline 
     printf("After removal >>%s<<\n", str);   // show that newline was removed 
    } 
    return 0; 
} 

程序輸出

Enter number of cases 
2 

Enter string 
one 
Shows newline >>one 
<< 
After removal >>one<< 

Enter string 
two 
Shows newline >>two 
<< 
After removal >>two<< 
+0

非常感謝你:) – user007

-1

這聽起來像你沒有得到預期的字符串的數量,這是正確的?

如果是這樣的話,看看你的循環代碼。

最有可能的新手錯誤是與索引。 C中的數組索引爲0。

這意味着如果你有int test [3],測試的索引將是0,1和2.這意味着最高索引將是N-1。

所以,請確保您接受的第一個字符串被放置到索引0,而不是索引1

0

試試吧 -

int lineNumbers; 
scanf("%d", &lineNumbers); 
char **linesOfString = (char**) malloc(lineNumbers * sizeof(char *)); 
int i; 
for(i = 0; i < lineNumbers; i++) { 
    fflush(stdin); 
    linesOfString[i] = (char *) malloc(255 * sizeof(char)); 
    scanf("%s", linesOfString[i]); 
} 
for(i = 0; i < lineNumbers; i++) { 
    printf("%s", linesOfString[i]); 
} 
free(linesOfString); 

return 0;