gpt4 book ai didi

c - 在字符后读取多个数字

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:40 24 4
gpt4 key购买 nike

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

最佳答案

以一种非常简单的方式,您可以这样做:

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

关于c - 在字符后读取多个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43693763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com