【问题标题】:C: scanf and stringsC: scanf 和字符串
【发布时间】:2012-05-19 20:44:21
【问题描述】:

我对 scanf 和两个字符串有疑问。

char city1[11], city2[11];
for(int i = 0; i < (m + k); i++) {
scanf("%s %s", city1, city2);
}

我应该读 (m + k) thimes 两个字符串 - citites 的名称。问题是,当我写一些字符串时,按 Enter 什么也没发生。指针在屏幕上,但我无能为力。我试图在 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);
}

【问题讨论】:

  • 请展示一个完整的例子。
  • 此代码 sn-p 类似于“C”。请编辑您的标签
  • 你能给出完整的代码吗? m nad k 定义了什么以及在哪里定义?
  • 我添加了一个完整的主函数。 ;)
  • 不要转换malloc的输出值。

标签: c string scanf


【解决方案1】:

这种情况可能不是你所期望的:

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 && n = -1 && m = -1 && k

do {
    scanf("%d %d %d", &n, &m, &k);
} while ( n < 2 || n > 10001 || m < -1 || m > 100001 || k < -1 || k > 100001 );

【讨论】:

  • 尤其是for 循环永远不会做任何事情,因为mk 必须都是负数才能退出do..while 循环。跨度>
  • n 必须是从 2 到 10001,m,k - 从 -1 到 100001。如果它们不在这个区间内,我必须重新输入它们。我觉得还可以。
【解决方案2】:

我已将 (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);
  }


}

输出是这样的。我输入了 a b c asdf c d

a b
city1: a
city2: b
c asdf
city1: c
city2: asdf
c
d
city1: c
city2: d

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多