2014-09-24 53 views
-1

因此,當系統提示輸入p的值時,如果輸入的字符太少,它會將我帶到下一行而不是下一個提示。如果我輸入一個足夠大的輸入,它工作正常。此外,我重新運行該程序似乎不起作用。C程序跳過一行

#include <stdio.h> 
#include <math.h> 
#include <limits.h> 
#include <ctype.h> 
int main() 
{ 
    char pbuffer[10], qbuffer[10], kbuffer[10]; 
    int p=0, q=0, k=0; 
    int r, i, Q, c, count, sum; 
    char a[3]; 
    a[0]='y'; 

    while(a[0]=='y' || a[0]=='Y') 
    { 
     printf("Enter a p value: \n"); 
     fgets(pbuffer, sizeof(pbuffer), stdin); 
     while ((c = fgetc(stdin)) != '\n' && c != EOF); 
     p = strtol(pbuffer, (char **)NULL, 10); 

     printf("Enter a q value: \n"); 
     fgets(qbuffer, sizeof(qbuffer), stdin); 
     while ((c = fgetc(stdin)) != '\n' && c != EOF); 
     q = strtol(qbuffer, (char **)NULL, 10); 

     printf("Enter a k value: \n"); 
     fgets(kbuffer, sizeof(kbuffer), stdin); 
     while ((c = fgetc(stdin)) != '\n' && c != EOF); 
     k = strtol(kbuffer, (char **)NULL, 10); 

     while(p<q+1) 
     { 
     Q=p; 
     sum=0; 
     count=0; 
     while(Q>0) 
     { 
      count++; 
      r = Q%10; 
      sum = sum + pow(r,k); 
      Q = Q/10; 
     } 

     if (p == sum && i>1 && count==k) 
     { 
      printf("%d\n",p); 

     } 
     p++; 
     a[0]='z'; 
     } 
     while((a[0]!='y') && (a[0]='Y') && (a[0]!='n') && (a[0]!='N')) 
     { 
     printf("Would you like to run again? (y/n) "); 
     fgets(a, sizeof(a), stdin); 
     } 
     while ((c = fgetc(stdin)) != '\n' && c != EOF); 
    } 
    return 0; 
} 

輸出:

Enter a p value: 
1 
1 
Enter a q value: 
1000 
0 
+0

您的程序和輸出不匹配。這不是你在這個問題中描述的問題,也有比計劃更多的輸出。 – Wug 2014-09-24 02:49:59

+0

這正是我得到的輸出結果。我拍了一張照片,但現在不能和我的小代表一起發表。 – 2014-09-24 03:05:15

+0

然後您的發佈代碼已過期。您不打印您讀取的值,但您的提示之間有2個數字。當我逐字運行此代碼時,它會打印出不同的內容。 – Wug 2014-09-24 03:18:20

回答

0

首先,你必須在代碼行錯誤

while((a[0]!='y') && (a[0]='Y') && (a[0]!='n') && (a[0]!='N')) 

你已經錯過了 '!'字符在第二個條件 而對於你的問題,什麼是使用這一行的原因:

while ((c = fgetc(stdin)) != '\n' && c != EOF); 

如果我們用控制檯的工作只是等待一個更「\ n」 因爲前一個是採取與fgets