【问题标题】:Code skips the input for the name of driver 2 & 3 but prints for driver 1 as well prints the output of km as 0.00 for all drivers代码跳过驱动程序 2 和 3 名称的输入,但打印驱动程序 1 以及将所有驱动程序的 km 输出打印为 0.00
【发布时间】:2021-12-31 21:31:39
【问题描述】:

我正在编写代码来打印三个驱动程序的详细信息,但问题是程序正确地接受了驱动程序 1 的输入,但跳过了驱动程序 2 和 3 的名称输入,尽管提供了输入,但它打印了 distance travelled作为0.0

#include<stdio.h>
struct data
{
    char name;
    int dlo;
    char route;
    float km;
}s1,s2,s3;
void details(struct data *d)
{
    printf("Enter your name: ");
    scanf(" %s",&d->name);
    printf("Enter your driving license no: ");
    scanf("%d",&d->dlo);
    printf("Enter route taken: ");
    scanf("%s",&d->route);
    printf("Enter distance travelled: \n");
    scanf("%.2f",&d->km);
}
void output(struct data *d)
{
    printf("Driver name: %s\n", &d->name);
    printf("Driving license no: %d \n", d->dlo);
    printf("Route taken: %s\n", &d->route);
    printf("Distance travelled: %.2f \n", d->km);
}
int main()
{
        printf("\n--------------driver 1---------------\n");
        details(&s1);
        printf("\n");
        output(&s1);
        printf("\n--------------driver 2---------------\n");
        details(&s2);
        printf("\n");
        output(&s2);
        printf("\n--------------driver 3---------------\n");
        details(&s3);
        printf("\n");
        output(&s3);
    return 0;
}

输出如下:

--------------driver 1---------------
Enter your name: abhishek
Enter your driving licence no: 123
Enter route taken: abcd
Enter distance travelled: 
123

Driver name: abhishek
Driving licence no: 123
Route taken: abcd
Distance travelled: 0.00

--------------driver 2---------------
Enter your name: Enter your driving licence no: 321
Enter route taken: efgh
Enter distance travelled: 
45 

Driver name: 123
Driving licence no: 321
Route taken: efgh
Distance travelled: 0.00

【问题讨论】:

  • char name; 可以存储 1 个字符,例如 'A',但不能存储 "Abhishek"。将其更改为char name[50];,并在scanfprintf处删除d-&gt;name前面的&amp;
  • 我已经展示了问题中的输出是如何出现的,请仔细阅读
  • 实际上char name 甚至不能存储单个字符,如果您打算将其用作字符串,因为您需要为终止空字符留出空间——在这种情况下,它将占据唯一可用的字符位置。 .
  • 问题是你实际上调用了未定义的行为。你写超出了数组边界(你可以认为char name 相当于一个长度为 1 的数组),所以 任何事情 都可能发生,甚至(不小心!)输出预期的结果。
  • @Aconcagua 从现在开始我一定会听从你的建议,谢谢你的建议

标签: c pointers structure


【解决方案1】:

问题是我在scanf 中使用了%.2f,这导致了运行时错误,因此通过将scanf("%.2f",&amp;d-&gt;km); 更改为scanf("%f",&amp;d-&gt;km);,错误也得到了解决,我还必须为name 使用数组和route 以避免进一步的运行时错误。

非常感谢大家的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多