【问题标题】:C string output to null [closed]C字符串输出为null [关闭]
【发布时间】:2022-01-04 06:23:07
【问题描述】:

所以我这里有这段代码来获取用户的三个输入,一个整数类型和 2 个字符类型:

#include <stdio.h>

int main() {

    int carNumber;
    char customerName, carCode;

    printf("Enter Car Number: ");
    scanf("%d", &carNumber);
    printf("Enter Customer Name: ");
    scanf("%s", &customerName);
    printf("Enter Car Code: ");
    scanf("%s", &carCode);

    if (carCode == 'T'){
        printf("Toyota");
    }
    else if (carCode == 'H'){
        printf("Honda");
    }

    printf("\nCar Number: %d", carNumber);
    printf("\nCustomer Name: %s", customerName);
    return 0;

}

虽然大部分输出正确,但customerName 始终打印(null)

【问题讨论】:

  • 变量customerNamecarCode单个字符。它们不能保存以 null 结尾的字符串(您尝试读入它们)。如果carCode 应该是单个字符,请使用格式字符串" %c" 来读取它(注意格式字符串中的前导空格)。如果customerName 应该是一个字符串,则需要一个字符数组(例如char customerName[100];)。看起来您似乎跳过了教科书的一些相当重要的部分。
  • 我尝试将它们分成两个不同的行,分别为 char customerName[20];char carCode; 以区分它们,但 customerName 现在什么也不输出。
  • 我同意@Someprogrammerdude max1eee-我已经编辑了你的整个程序,你可以测试一下。

标签: c null


【解决方案1】:

要打印一个字符,它是" %c" 而不是"%s"。 要么使用:

char customerName[30];
printf("Customer Name: %s", customerName);

char customerName;
printf("Customer Name: %c", customerName);

这是你的整个程序:

#include <stdio.h>

int main()
{
    int carNumber;
    char carCode;
    char customerName[30];

    printf("Enter Car Number: ");
    scanf("%d", &carNumber);
    printf("Enter Customer Name: ");
    scanf("%s", customerName);
    printf("Enter Car Code: ");
    scanf(" %c", &carCode);

    if (carCode == 'T'){
        printf("Toyota\n");
    }
    else if (carCode == 'H'){
        printf("Honda\n");
    }

    printf("Car Number: %d\n", carNumber);
    printf("Customer Name: %s\n", customerName);
     printf("Car Code: %c\n", carCode);
    return 0;
}

【讨论】:

  • 我将输入一个名称,而不仅仅是一个字符,并且字符串不被接受为 C 中的关键字。不过谢谢!
  • @Shawn 我编辑了我的回复,感谢您的指点。
  • @max1eee- 我编辑了我的答案,请检查。
  • 在一个不相关的注释上:打印前导换行符是一个坏习惯。当stdoutprintf 写入)连接到终端时,它应该是 line 缓冲的,这意味着当有换行符时实际写入输出。因此,通过打印前导换行符,您可以刷新并打印 previous 行,而不是当前行。
  • 好吧 tf.我前一阵子这样做了,它没有打印任何东西,但是当我复制你的并且它起作用时,我很困惑。无论如何,谢谢大家!
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2014-10-17
  • 2015-10-22
  • 1970-01-01
  • 2014-08-13
  • 2020-09-24
  • 1970-01-01
相关资源
最近更新 更多