C如何输入以空格分隔的值(战舰游戏)

时间:2015-04-03 16:19:32

标签: c

所以,我必须在'c'中使用这个战舰游戏,我有一个功能,当被叫时要求输入一个板的大小,2行数字(这对他们现在所做的并不重要)和代表战舰委员会的委员会。所以输入看起来像这样:

  

C

     

10 10

     

3 1 3 1 2 2 3 1 1 3

     

2 2 0 2 2 2 2 3 4 1

     

..........

     

..........

     

..........

     

..........

     

...〜......

     

< .........

     

...〜... ^。〜

     

..........

     

..........

     

..........

重要部分

我需要帮助,因为我不能单独使用数字或字符存储在单独的变量中。我尝试使用scanf()但由于空格不起作用。我怎么能这样做? (我正在寻找最简单的方法)

这与我所拥有的一致:

void c(){
int a, c;
scanf("%d %d", &alt, &comp);
/*alt and comp are external. these will hold the first two numbers */

for(a=0; a< alt; a++){
    scanf("%d", &s[0][a]); 
}
for(c=0; c < comp; c++){
    scanf("%d", &s[1][c]);
} /* these two fors are supposed to get the first two rows of numbers to an external array */

for(a=0; a < alt, a++){
    for(c=0; c < comp; c++){
        scanf("%c", &tab[a][c]);
    }
}/* this is supposed to get the board to 'tab' (external) */
}

1 个答案:

答案 0 :(得分:0)

您可以尝试在scanf中添加一个空格,如下所示:scanf("%d ", &s[1][c]);以消耗空格,但是您需要特殊情况下该行的最后一个数字,因为它不会有尾随空格。< / p>

相反,我会阅读整行数字并使用strtok分割空格上的行。

#include <string.h>
#include <stdio.h>

char[100] line;
char *number;
int i;

i = 0;
gets(line);
number = strtok (line, " ");
while(number != NULL;) {
    s[0][i] = atoi(number);
    number = strtok(NULL, " ");
    i += 1;
}

i = 0;
gets(line);
number = strtok (line, " ");
while(number != NULL;) {
    s[1][i] = atoi(number);
    number = strtok(NULL, " ");
    i += 1;
}