【问题标题】:Whats wrong with this C program? (Scanning from terminal using scanf)这个 C 程序有什么问题? (使用scanf从终端扫描)
【发布时间】:2012-03-15 20:06:26
【问题描述】:

程序刚刚构建,但提示就像卡在无限循环中一样挂起。

第一个 printf 语句甚至没有运行。

该程序的想法是获取 MMSI、名称、位置、路线和速度,并将它们放在一个结构中以写入文件。

int main(int argc, char** argv) {

    ship *current_ship;

    current_ship = getShipInfo();
    //writeShip(current_ship);

    return (EXIT_SUCCESS);
}
ship * getShipInfo() {
    ship *current_ship;
    current_ship = malloc(sizeof(ship));
    int MMSI, course;
    char name[51];
    float lat, lon, speed;

    printf("Enter MMSI (9 digits):\n"); 
    scanf(" %9d", &MMSI);

    printf("Enter ship name (upto 50 characters):\n");
    scanf(" %51s", name);

    printf("Enter ship latitude (real number with upto 3 decimal places):\n");
    scanf(" %f", &lat);

    printf("Enter ship longitude (real number with upto 3 decimal places):\n");
    scanf(" %f", &lon);

    printf("Enter course made good (degrees from true north):\n");
    scanf(" %3d", &course);

    printf("Enter speed over the ground (in knots with exactly one decimal place):\n");
    scanf(" %f", &speed);

    current_ship->MMSI = MMSI;
    strcpy(current_ship->name, name);
    current_ship->lat = lat;
    current_ship->lon = lon;
    current_ship->course = course;
    current_ship->speed = speed;

    return current_ship;
}

【问题讨论】:

  • 终端是否处于阻止stdout 被刷新的特殊模式?尝试在printf() 调用之后插入fflush(stdout)
  • 您尝试过哪些调试方式?例如,如果您将return NULL; 作为getShipInfo() 中的第一条语句,那么程序是否运行正常?诸如此类。
  • 最好发布完整的代码,包括船舶结构声明和函数声明等

标签: c scanf


【解决方案1】:

你分配了船->名字吗?

current_ship->name = malloc(51);

【讨论】:

    【解决方案2】:

    ship * getShipInfo() 是在 main() 函数之前声明的吗? 这可能是个问题。

    【讨论】:

    • 它在头文件中声明,这不是问题
    • 嗯,这不是一个完整的程序吗?
    【解决方案3】:

    您的问题是 scanf 格式字符串开头的空格。你更大的问题是使用 scanf 。只需使用 fgets 即可。

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多