【问题标题】:printf not printing integer stored in variableprintf 不打印存储在变量中的整数
【发布时间】:2021-12-06 12:25:54
【问题描述】:

由于某些奇怪的原因,当我在标记部分输入值时,打印的值都是 0,请帮忙,我尝试运行较小版本的代码,但它工作了,我不知道为什么这没有。 这是代码: 堆栈溢出一直给我一个错误,因为显然我的大部分问题都是代码,所以请忽略这个

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int marksComm;
    char gradeComm[1];
    int marksEco;
    char gradeEco[1];
    int marksCompsys;
    char gradeCompsys[1];
    int marksProg;
    char gradeProg[1];
    int marksDis;
    char gradeDis[1];
    int marksLab;
    char gradeLab[1];
    int marksPhy;
    char gradePhy[1];
    printf("CCS001\nMarks> ");
    scanf("%d", &marksComm);
    printf("Grade> ");
    scanf("%s", &gradeComm);

    printf("\nCCS009\nMarks> ");
    scanf("%d", &marksEco);
    printf("Grade> ");
    scanf("%s", &gradeEco);

    printf("\nCSC111\nMarks> ");
    scanf("%d", &marksCompsys);
    printf("Grade> ");
    scanf("%s", &gradeCompsys);

    printf("\nCSC112\nMarks> ");
    scanf("%d", &marksProg);
    printf("Grade> ");
    scanf("%s", &gradeProg);

    printf("\nCSC113\nMarks> ");
    scanf("%d", &marksDis);
    printf("Grade> ");
    scanf("%s", &gradeDis);

    printf("\nCSC126\nMarks> ");
    scanf("%d", &marksPhy);
    printf("Grade> ");
    scanf("%s", &gradePhy);

    printf("\nCSC115\nMarks> ");
    scanf("%d", &marksLab);
    printf("Grade> ");
    scanf("%s", &gradeLab);

    printf("\nCourse Code       Marks      Grade\n");
    printf("CCS001             %d         %s \n", marksComm, gradeComm);
    printf("CCS009             %d         %s \n", marksEco, gradeEco);
    printf("CSC111             %d         %s \n", marksCompsys, gradeCompsys);
    printf("CSC112             %d         %s \n", marksProg, gradeProg);
    printf("CSC113             %d         %s \n", marksDis, gradeDis);
    printf("CSC115             %d         %s \n", marksLab, gradeLab);
    printf("CSC126             %d         %s \n", marksPhy, gradePhy);
}

【问题讨论】:

  • 你的字符串缓冲区太小了。
  • char gradeComm[1]; 也许您想使用 char gradeComm; 并更新您的 scanf 而不是 1 字符数组,没有空格用于空终止符。还是您希望输入一串字符?
  • 所有[1] 数组都不够大。您需要输入字符串和终止空字符的空间。 [1] 只为空值提供空间,而不是输入空间。
  • 如果您从char XXX[1] 更改为char XXX,请将scanf() 格式更改为" %c" -- 不要忘记它前面的空格。
  • 你的输入是什么样的? “分数”百分比和“等级”是字母等级吗?字母等级可以包括“+”或“-”吗?我们需要此类信息来帮助您。

标签: c printf scanf


【解决方案1】:

您的数组很小。 C 字符串以 NUL 结尾,因此您需要一个 char 来表示字母,而一个字符来表示 NUL。那是两个char。但是你预留了一个空间。

【讨论】:

  • 好的,所以我增加了数组的大小并且它起作用了,tysm 我刚注册到 uni 做 comp sci,所以我不明白这些东西的大部分。你能解释一下为什么更改char 可以解决int 的问题吗?因为现在我有点知道出了什么问题,我认为 char 是应该有问题的,而不是 int (对不起,如果我问的没有意义,我是不善于解释)
  • 该错误导致未定义的行为。当你这样做时,任何事情都可能发生。可能发生的情况是您正在覆盖恰好用于存储标记的内存。
猜你喜欢
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
相关资源
最近更新 更多