2015-12-08 54 views
0

我有這樣的代碼:爲什麼它忽略了第二字符

#include <stdio.h> 
#include <ctype.h> 

int main() 
{ 
    char x; 
    printf("Program shows your name and check if the first letter is capital"); 
    while (scanf_s("%c", &x) !=1 || getchar() !='\n') 
    { 
     if (islower(x)) 
     { 
      printf("Name begins with a capital letter\n"); 
      while (getchar() != '\n') 
       ; 
     } 
     else 
     { 
      printf("%c", x); 
     } 
     break; 
    } 
    while ((x = getchar()) != EOF) 
    { 
     printf("%c", x); 
    } 
     return 0; 
} 

例如: 當I型「馬修」的結果是「Mtthew」。怎麼了?我沒有任何線索。 我試圖改變幾乎所有的第一個「雖然」,但我認爲這個問題不存在。有任何想法嗎?

+2

3 while while循環的功能?也許你應該考慮重寫它 – Idos

+1

如果你將它與EOF比較,你應該聲明x爲'int'。另外'int main()'應該是'int main(void)'。 –

+0

不知道,但我認爲其他人必須在其他區塊 – Cherubim

回答

3

函數getChar()從輸入流中移除一個字符,以使其不再位於其上。通過你的條件語句中使用它,它是:

  • 從流獲取字符(又名:刪除它)
  • 比較它,最後
  • 丟棄它(還沒有地方保存它)

如果您重構代碼以考慮這一點,那麼我相信你的神祕人物將返回:-)

0

更改第一while

while ((x = getchar()) != EOF && x != '\n') 

編輯:改變char xint x因爲EOF不能保證是由char表示的。

+0

謝謝,現在一切正常完美。 – Matth3w

0

你的程序的工作沒有跳過一個字符時,更改如下:(指的是行註釋)

int x; //change to int for use with getchar() 
printf("Program shows your name and check if the first letter is capital"); 
while (scanf("%d", &x) !=1 || getchar() !='\n') 
      ^//changed to d for int 

但是關於getchar()吃了字符@ J.Murray的答案提出的意見是有效的。所以,儘管你的程序對我有用,但有些輸入序列不適用。

:之所以使用int,而不是chargetchar()可以返回EOF,這== -1。 A char不能包含-1。

0

當然不正確使用的scanf_s("%c", &x)

的fscanf_s功能相當於不同的是C,S,和FSCANF [轉換說明適用於對參數(除非分配抑制由*表示)。第一個參數與fscanf相同。該參數緊接在參數列表中,第二個參數的類型爲rsize_t,並給出了該參數對的第一個參數指向的數組中元素的數量。 (C111dr§K.3.5.3.26)

scanf_s("%c", &x, (rsize_t)1) 

其他問題可能存在。

相關問題