【发布时间】:2021-08-13 02:17:40
【问题描述】:
我希望大家都做得很好。我的老师给了我这个作业。
下面的问题是什么:
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);
}
}
}
【问题讨论】:
-
请参阅scanf() leaves the newline char in the buffer。
scanf转换在它无法转换的第一个字符处停止,通常(但不一定)是空格或换行符,并且该字符保留在输入缓冲区中。 nextscanf()将读取它。格式说明符%d和%s和%f会自动过滤这些前导空白字符,但%c和%[]和%n不会。您可以通过在%之前添加一个空格来指示scanf这样做。所以scanf(" %c", &sort);. -
scanf()家族不是简单的函数,但学生很快就会上手。我建议至少花一个小时阅读手册页和一个小测试程序。 -
还要注意
Sort()函数没有后卫操作来处理传递的值不是四个预期值之一,例如else printf("Invalid entry\n");程序更健壮。 -
您的建议立即解决了我的代码问题。非常感谢您的回复。 :))
标签: c output user-input primes