我正在为旅行骑士问题做一个非常简单的BFS搜索。不幸的是,我的输入决定出错。这段代码给出了正确的结果。
char start[2], destination[2];
scanf("%s", start); // input string is "e2"
printf("%d %d\n", start[0], start[1]); // start[0] = 101, start[1] = 50
(in ASCII, 101 is 'e' and 50 is '2')
我使用的那个
scanf("%s", start); // input string is "e2"
scanf("%s", destination); // input string is "e4"
printf("%d %d\n", start[0], start[1]); // start[0] = 0, start[1] = 50
或
scanf("%s %s", start, destination); // input string is "e2 e4"
printf("%d %d\n", start[0], start[1]); // start[0] = 0, start[1] = 50
目标数组不会遇到这种错误。我做错什么了吗?如果这是一个错误,有没有我可以使用的替代方案?
编辑:开始声明为char [2],同样与目的地相同。 SSCCE
void main()
{
char start[2], destination[2];
scanf("%s", start); // input string is "e2"
scanf("%s", destination); // input string is "e4"
printf("%d %d\n", start[0], start[1]); // start[0] = 101, start[1] = 50
}
答案 0 :(得分:2)
四件事。
void main()
不标准。它应该返回int
scanf()
到数组的任何字符串的长度限制为比数组大小少一个。那会对你暗示你的缓冲区太小了。 "%1s"
嗯.... scanf()
结果。那就是说,
#include <stdio.h>
#include <stdlib.h>
int main()
{
int res = EXIT_FAILURE;
char start[3], destination[3];
if (scanf("%2s", start) == 1 &&
scanf("%2s", destination) == 1)
{
printf("%d %d\n", start[0], start[1]);
res = EXIT_SUCCESS;
}
return res;
}