我的程序在要求输入字符后立即退出

时间:2021-05-24 19:17:40

标签: c output user-input primes

希望大家一切都好。我的老师给了我这个作业。

下面是什么问题:

Write a program that will ask for n positive whole numbers. Your program will only stop asking for a number if the input number is 0 or < 0. From these inputs, determine all the prime numbers. After determining the prime numbers, write a menu option shown below:
                
            [A] Display One’s   
            [B] Display Ten’s 
            [C] Display Hundred’s 
            [D] Display Thousand’s 

    If the user presses on of these options, then it will display what is being asked. To further understand and shorten the instructions, an illustration is provided below.

Input numbers: 123, 112, 1377, 2, 13, 0
Prime numbers: 123 1377 2 13
If the user presses ‘A’, then the output is
        123     = 3
        1377    = 7
        2   = 2
        13  = 3
If the user presses ‘B’, then the output is
        123 = 23
        1377    = 77
        2   = 0
        13  = 13
If the user presses ‘C’, then the output is
        123 = 123
        1377    = 377
        2   = 0
        13  = 0
If the user presses ‘D’, then the output is
        123 = 0
        1377    = 1377
        2   = 0
        13  = 0


我写了一个我认为可以解决问题的程序,但不知何故在我输入一个字符(A、B、C、D)后程序立即终止? 如果有人可以指出任何其他错误或有任何建议。我会向他们敞开心扉,我会很感激。非常感谢。 :))

#include<stdio.h>

int isPrime(int num);
void Sort(char sort, int psize, int* prime);

int main ()
{
    int psize=0;
    int i, num=1;
    int arr[1000], prime[1000];
    char sort;

    do
    {
        printf("Enter array element:");
        scanf("%d", &num);

        if(num<=0) break;

        if(isPrime(num))
        {
            prime[psize]= num; //assign to prime array if it is a prime
            psize++;
        }

    } while(num>0);

    printf("\nEnter [A] to Display One's\nEnter[B] Display Ten's\nEnter[C]Display Hundred's\nEnter[D]Display Thousand's");

    scanf("%c", &sort);

    Sort(sort, psize, prime);

}

int isPrime (int num)
{
  int i, flag=1;
  for(i=2;i<num;i++)
   {
    if(num%i==0)
      {
       flag=0;
       break;
      }
   }
   return flag;
}

void Sort(char sort, int psize, int* prime)
{
    int i, ans;

    if(sort == 'A'){
        printf("Ones\n");
        for(i=0;i<psize;i++)
        {
            ans = prime[i] % 10;
            printf("%d = %d\n", prime[i], ans);
        }
    }

    else if(sort == 'B'){
        printf("Tens\n");
        for(i=0;i<psize;i++)
        {
            if(prime[i] >= 10)
            ans = prime[i] % 100;
            else
            ans = 0;
            printf("%d = %d\n", prime[i], ans);
        }
    }

    else if(sort == 'C'){
        printf("Hundreds\n");
        for(i=0;i<psize;i++)
        {
            if(prime[i] >= 100)
            ans = prime[i] % 1000;
            else
            ans = 0;
            printf("%d = %d\n", prime[i], ans);
        }
    }
    else if(sort == 'D'){
        printf("Thousands\n");
        for(i=0;i<psize;i++)
        {
            if(prime[i] >= 1000)
            ans = prime[i] % 10000;
            else
            ans = 0;
            printf("%d = %d\n", prime[i], ans);
        }
    }

}


1 个答案:

答案 0 :(得分:-2)

我认为这会对你有所帮助。 在 fflush() 函数后放一个 scanf,例如:

scanf("%d", &num);
fflush(stdin);

或者您使用更简单的方法

int getNumber()
{
    char userinput = '1';
    int number = 0;
    /*
        Ascii-table
        0 = 48
        1 = 49
        ...
        9 = 57
    */
    while(1)
    {
      userinput = getchar();
      if (userinput == '\n') break;
      if (userinput >= 48 && userinput <= 57)
         number = (number * 10) + (userinput - 48);
    }
    
    return number;
}

将您的 scanf("%d", &num); 替换为 num = getNumber(); - 有效!

所以,这里是另一个带有 A-D 字母的代码

我希望这已经足够了 - 所有用户都原谅我不完整的代码审查 ^^" :

int getNumber( int opt )
{
    char userinput = '1';
    int number = 0;
    /*
        Ascii-table
        0 = 48
        1 = 49
        ...
        9 = 57
    */
    while(1)
    {
      userinput = getchar();
      if (userinput == '\n') break;
      
      /*
        opt (Options)
            1: Numbers
            2: Letters A-D
            Other numbers undefined!
      */
      switch(opt)
      {
        case 1:
            /* Only 0-9 allowed */
            if (userinput >= 48 && userinput <= 57)
                number = (number * 10) + (userinput - 48);
        break;
        case 2:
            /* Only A-D allowed */
            if (userinput >= 'A' && userinput <= 'D')
                number = userinput;
        break;
        default:
            /* Nothing to do - wrong input */
            number = 0; 
        break;
      }
      
    }
    
    return number;
}

将您的 scanf("%d", &num); 替换为 num = getNumber(1);

将您的 scanf("%d", &sort); 替换为 sort = getNumber(2);

相关问题