我被要求写一个关于行人的程序。 程序方向:
假设一个人(例如,A)站在(0,0)处,等待用户给他指示方向和距离。
用户可以输入N E W S来表示北,东,西,南以及距离的任何值。
当用户输入0作为方向时,停下来并打印出该人停下的位置
我的代码:
X = initial(4) // X should be : 1111
Y = solution(X, 2) // Y should be 1101
Z = solution(Y, 3) // Z should be 1001
但是当我在前两个输入之后运行程序时,它将在有效输入中打印无效输出。
答案 0 :(得分:0)
这是OR与AND的经典错误。 应该是
if(dir != 'N' && dir != 'S' && dir != 'E' && dir != 'W') .
例如,如果用户输入“ N”,则在这种情况下,if语句仍将返回成功,因为它的!=“ S”且if条件具有OR。
编辑:(按照@ usr2564301的建议。)
在scanf输入%c
之前添加一个空格。
scanf(" %c",&dir);
答案 1 :(得分:0)
因此,我发现了您的问题:在输入“英里”后按“ Enter”键时,“ Enter”被注册为输入,为'\ n'字符。我在这里为您提供了一个解决方案,但是如果您不喜欢它,只需做一个特殊的情况即可忽略'\ n'字符。类似于else if (dir == '\n') continue;
。我怀疑这可能是问题所在,但我在打印出“无效字符”后就确认了这一点。
int main()
{
float x = 0, y = 0;
char dir;
float mile;
do
{
printf("Enter input direction as N,S,E,W (0 to exit): ");
scanf("%c", &dir);
switch (dir)
{
case 'N':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
y += mile;
break;
case 'S':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
y -= mile;
break;
case 'E':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
x += mile;
break;
case 'W':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
x -= mile;
break;
case '\n':
break;
case '0':
break;
default:
printf("Invalid Direction, re-enter; You entered: %c \n", dir);
break;
}
}while (dir != '0');
printf("\nCurrent position of A: (%4.2f, %4.2f)\n", x, y);
return 0;
}