2013-07-21 119 views
0

示例代碼:Fgets沒有得到任何來自標準輸入的輸入或標準輸入不等於輸入?

char cnumb1[2]; 
    NSLog(@"Do you have an account already?(1 for Yes, 0 for no)"); 
    int c; 
    //Flushes input 
    while((c = getchar()) != '\n' && c != EOF); 
    fgets(cnumb1, sizeof cnumb1, stdin); 
    size_t length = strlen(cnumb1); 
    if (cnumb1 [length-1] == '\n'){ // In case that the input string has 1 character plus '\n' 
     cnumb1 [length-1] = '\0';} // Plus '\0', the '\n' isn't added and the if condition is false. 
    NSString* string = [NSString stringWithUTF8String: cnumb1]; 
    NSLog(@"string:%@", string); 

隨着輸入「0」(編輯:出於某種原因,我需要按兩次回車鍵),我得到的輸出「字符串:」 據我所知道的, stdin沒有正確設置。 此外,我開始沒有沖洗線,但這導致了很多問題,因爲我有更多的fgets後來,它的stdin只會是初始輸入,所以我加了這些。

爲什麼不將輸入設置爲標準輸入? 還是完全是另一個問題?

+0

''char cnumb1 [2]; fgets(cnumb1,3,stdin);' - *** ??? *** – 2013-07-21 19:22:39

+0

哦,這是示例代碼中的錯誤,對不起!我會改變這一點。它通常不在代碼中。抱歉! –

+0

如果您接受一些建議:使用'sizeof cnumb1'而不是硬編碼的大小。 – 2013-07-21 19:28:50

回答

0

while((c = get char()) != '\n' && c != EOF); 

需要直接去與fgets之後,而不是之前。

此外,雖然沒有直接回答這個問題,它能夠更好地做

fgets(cnumb1, sizeof cnumb1, stdin); 

然後在的sizeof cnumb1硬編碼,如@ H2CO3好心向我指出。