我有scanf和两个字符串的问题。
char city1[11], city2[11];
for(int i = 0; i < (m + k); i++) {
scanf("%s %s", city1, city2);
}
我应该读(m + k)thimes两个字符串 - citites的名字。问题是,当我写一些字符串时,按下输入没有任何问题。指针在屏幕上,但我什么也做不了。我试着在scanf之后用printf写一些东西,但它不起作用。 :/
更多代码:
int n, m, k;
do {
scanf("%d %d %d", &n, &m, &k);
} while(n < 2 || n > 10001 || -1 < m || m > 100001 || -1 < k || k > 100001);
city* cities = (city*)malloc(n*sizeof(city));
path* paths = (path*)malloc((m + k)*sizeof(path));
int addCities = 0;
char city1[11], city2[11];
for(int i = 0; i < (m + k); i++) {
scanf("%s %s", city1, city2);
printf("ok");
if(addCities < n && !isListed(cities, n, city1)) { // if city1 is not into cities
// add it
strcpy(cities[addCities].name, city1);
cities[addCities].prev = NO_PARENT;
addCities++;
}
paths[i].i = getCityNumber(cities, n, city1); // number of city1
if(addCities < n && !isListed(cities, n, city2)) { // if city2 is not into cities
// add it
strcpy(cities[addCities].name, city2);
cities[addCities].prev = NO_PARENT;
addCities++;
}
paths[i].j = getCityNumber(cities, n, city1); // number of city2
if(i >= m)
scanf("%d", &paths[i].price);
}
答案 0 :(得分:2)
可能是这种情况意味着不是你所期望的:
while(n < 2 || n > 10001 || -1 < m || m > 100001 || -1 < k || k > 100001)
当这个条件成立时,这会询问你n,m,k。 如果你输入n = 3,m = -1,k = -1,它将接下来通过。
n,m,k范围对输入有效吗?
如果n> = 2&amp;&amp; n&lt; = 10001,m&gt; = -1&amp;&amp; m&lt; = 100001,k&gt; = -1&amp;&amp; k <= 100001,然后 有效循环是
do {
scanf("%d %d %d", &n, &m, &k);
} while ( n < 2 || n > 10001 || m < -1 || m > 100001 || k < -1 || k > 100001 );
答案 1 :(得分:1)
我已将(m + h)替换为数字10,因为您未在代码中引用m或h。这是一些看起来像你想做的代码。这段代码有效。
#include <string>
#include <stdio.h>
int main(void){
char city1[11], city2[11];
for (int i=0;i<10;i++){
scanf("%s %s",city1,city2);
printf("city1: %s\n",city1);
printf("city2: %s\n",city2);
}
}
输出是这样的。我输入了一个b c asdf c d
a b
city1: a
city2: b
c asdf
city1: c
city2: asdf
c
d
city1: c
city2: d
我希望这有帮助!