在字符后读取多个数字

时间:2017-04-29 09:05:14

标签: c string integer

我试过这个代码,它接受初始坐标(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数组中的值。我哪里错了?

1 个答案:

答案 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');