我试过这个代码,它接受初始坐标(x,y)的输入。然后得到N3 E2等形式的字符串。其中N表示北E是东,W是西,S是南。输出应该是最终坐标
输入格式: 第一行将包含由空格分隔的机器人的初始x,y坐标。第二行将包含每个以空格分隔的命令列表。
边界条件:命令列表的长度为2到200.
输出格式:机器人的最终x,y坐标用空格分隔。
示例输入/输出:
输入:
0 0
E9 N6
输出:
9 6
说明:机器人向东移动9个单位,然后向北移动6个单位。
现在我尝试了以下代码:
#include <stdlib.h>
#include <stdio.h>
int main(){
char s[1000], alp[1000];
int num[1000],a,c;
int i, k = 0, m, n;
scanf("%d%d",&a,&c);
getchar();// To get the newline after the coordinates
//Read string until newline character is encountered
if (scanf("%999[^\n]", s) == 1) {
for (i = 0; s[i]; i++) {
n = 1;
if (isalpha((unsigned char)s[i])) {
alp[k] = s[i]; // store the letter
for (n = s[i+1] - '0'; isdigit((unsigned char)s[i+2]); i++) {
n = n * 10 + s[i+1] - '0';
}
num[k] = n; // store the number
k += 1;
}
}
for (i = 0; i < k; i++) {
printf("num[%d] = %d alp[%d] = %c\n",i,num[i],i,alp[i]);
switch(alp[i]){
case 'N': c += num[i];
break;
case 'S': c -= num[i];
break;
case 'E':a += num[i];
break;
case 'W':a -= num[i];
break;
}
}
}
printf("\nNEW : %d %d",a,c); //Prints the output
putchar('\n');
return 0;
}
num
数组存储要在alp
数组中存储的特定方向上移动的距离值
现在这个代码适用于像N3 E2 W4等单位数移动,但适用于像
N10 W20 S200
我没有按预期获得存储在num
数组中的值。我哪里错了?
答案 0 :(得分:2)
以一种非常简单的方式,您可以这样做:
char dir, blank;
int num;
while (scanf("%c%d%c", &dir, &num, &blank) != EOF) {
// do anything
}
如果您想将输入命令保持在一行中:
do {
scanf("%c%d%c", &dir, &num, &blank);
// do anything
} while (blank != '\n');