我有一个功课,我正在尝试制作这个递归程序,但我错了。试图联系我的老师,但她已经离开这个国家,我感到迷茫。
关于该计划:
用户输入char符号,直到他输入'。'然后程序应该在屏幕上打印输入的符号,但前提是它们的ASCII码是偶数。
我做了我的想法,但在某个地方我出错了。
问题在于,当我输入"10 12 14 33 11 55 7 222 44 2 ."
时,我会打印"2 44 222 4 2 0"
。我不明白是因为我们正在谈论符号,所以我希望输入数字,其次是为什么要打印"0 2 4"
而不是"10 12 14"
?
我现在真的很困惑。我的希望在你身边!
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void ReversePrint()
{
char ch='A';
scanf("%c",&ch);
if(ch!='.')
{
ReversePrint();
if (ch%2==0)
{
printf("%c",ch);
}
else
{
printf("");
}
}
}
int main()
{
printf("ENTER SYMBOLS:\n");
ReversePrint();
printf("\n");
system("Pause");
return 0;
}
答案 0 :(得分:1)
我建议在代码中进行以下更改
我不知道你是否正在寻找
您的代码将是: -
#include <stdio.h>
#include <stdlib.h>
void ReversePrint()
{
char ch='A';
**int n;**
scanf("%c",&ch);
if(ch!='.')
{
**n=ch;**
if (n%2==0)
{
printf("%c",ch);
}
else
{
printf("");
}
**ReversePrint();**
}
}
int main()
{
printf("ENTER SYMBOLS:\n");
ReversePrint();
printf("\n");
system("Pause");
return 0;
}
答案 1 :(得分:0)
该程序在我看来完美无缺。
如果ascii代码是偶数,则输入的每个字符都以相反的顺序输出。可能会让您感到困惑的是,它甚至会输出您输入的空间。如果要排除非数字字符,则必须对其进行测试,例如
if (ch % 2 == 0 && isdigit(ch)) {
printf("%c", ch)
}
由于在else
部分没有任何反应,你可以完全消除它。
如果您想输入和输出整数而不是仅输入数字,您可以尝试
int n;
scanf("%d", &n);
和
if (n % 2 == 0) {
printf("%d", n)
}
答案 2 :(得分:0)
问题是当我输入“10 12 14 33 11 55 7 222 44 2”时。一世 得到印刷“2 44 222 4 2 0”。 我不明白我应该 输入数字,因为我们正在谈论符号,其次是为什么 是打印“0 2 4”而不是“10 12 14”?
那是因为每个字符都是单独检查的。 44不是44,它是4和4,而不是44。
Spaces也是一个ascii代码,并在程序中打印出来。
您似乎对Ascii Code和Ascii Symbol之间的区别感到困惑,请查看Ascii Table
在你的其他地方,你什么都不打印,它只消耗处理时间,你可以完全跳过其他的。
您可以通过查看char是否具有32(十进制)值来检查空间,并选择不打印它们以获得更好的输出。
答案 3 :(得分:0)
以下代码最多可读取由空格分隔的MAX_NUMBERS。字符串必须以空格和点结束。
它将读取一个数字并将其添加到表格中,然后将其添加到另一个数字中并再次添加,直到它达到“。”。然后,表格编号仅以偶数顺序显示。
因此,对于字符串10 12 14 33 11 55 7 222 44 2 .
,输出将为"2 44 222 14 12 10"
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUMBERS 500
int getNumber()
{
char ch;
int i, loop = 0, nb = -1;
char number[4];
/* Read one number (max 3 chars) */
i = 0;
do
{
scanf("%c", &ch);
if (ch != ' ' && ch != '.')
{
number[i] = ch;
i++;
}
else
{
loop = 1;
}
} while(loop == 0 && i < 4);
if (ch == '.' || i == 0)
{
nb = -1;
}
else
{
number[i] = '\0';
nb = atoi(number);
}
return nb;
}
int main()
{
int nb = 0, count, i;
int numbers[MAX_NUMBERS];
printf("ENTER SYMBOLS:\n");
count = 0;
while(nb > -1 && count < MAX_NUMBERS)
{
nb = getNumber();
/* printf("<%d>", nb); */
if (nb > -1)
{
numbers[count] = nb;
count++;
}
}
/* reverse printing */
for (i=0; i < count; i++)
{
/* select only even numbers */
if ((numbers[count - 1 - i] % 2) == 0)
{
printf("%d ", numbers[count - 1 - i]);
}
}
printf("\n");
system("Pause");
return 0;
}
考虑到这段代码并不完美,它不会检查给定输入的有效性,但它会做你想要的。
答案 4 :(得分:0)
使用int,因为它是0-255的数字输入。
void ReversePrint(void){
int ch;
if(scanf("%d", &ch)==1){
ReversePrint();
if(ch % 2 == 0)
printf("%d ", ch);
}
}