Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C++;运行时检查失败#2-围绕变量';成绩字母';他被腐蚀了。Visual Studio 2019。如何解决这个问题? #包括 #杂注警告(禁用:4996) //计算平均绩点 int main() { float finalGrade,totalQualityPoints=0,totalHours=0; 整小时,质量点,主题点,分数=0; 字母字符; printf(“你有多少科目?”); scanf(“%d”和“主题”); 对于(scanf(“%s”和&gradeLetter)行中的(int i=1;i_C_Visual Studio - Fatal编程技术网

C/C++;运行时检查失败#2-围绕变量';成绩字母';他被腐蚀了。Visual Studio 2019。如何解决这个问题? #包括 #杂注警告(禁用:4996) //计算平均绩点 int main() { float finalGrade,totalQualityPoints=0,totalHours=0; 整小时,质量点,主题点,分数=0; 字母字符; printf(“你有多少科目?”); scanf(“%d”和“主题”); 对于(scanf(“%s”和&gradeLetter)行中的(int i=1;i

C/C++;运行时检查失败#2-围绕变量';成绩字母';他被腐蚀了。Visual Studio 2019。如何解决这个问题? #包括 #杂注警告(禁用:4996) //计算平均绩点 int main() { float finalGrade,totalQualityPoints=0,totalHours=0; 整小时,质量点,主题点,分数=0; 字母字符; printf(“你有多少科目?”); scanf(“%d”和“主题”); 对于(scanf(“%s”和&gradeLetter)行中的(int i=1;i,c,visual-studio,C,Visual Studio,)您试图将字符串(即nul终止的char元素数组)读入单个字符。对于后者(如您的情况),您需要%c格式: scanf(“%c”、&gradeLetter); 正如您所拥有的,代码可能会写入超出实际gradeLetter变量(将在堆栈上分配)的内存,因此,您可能会损坏堆栈 注意:使用%c格式说明符也可能导致输入缓冲区中的“剩余”换行符(“enter”)出现问题。此问题在此处解决:。关于: #include <stdio.h> #pragma warning(disable:4996)

)您试图将字符串(即
nul
终止的
char
元素数组)读入单个字符。对于后者(如您的情况),您需要
%c
格式:

scanf(“%c”、&gradeLetter);
正如您所拥有的,代码可能会写入超出实际
gradeLetter
变量(将在堆栈上分配)的内存,因此,您可能会损坏堆栈

注意:使用
%c
格式说明符也可能导致输入缓冲区中的“剩余”换行符(“enter”)出现问题。此问题在此处解决:。

关于:

#include <stdio.h>
#pragma warning(disable:4996)

//Counting GPA
int main()
{
    float finalGrade, totalQualityPoints = 0, totalHours = 0;
    int hours, qualityPoints, subjectsCount, points = 0;
    char gradeLetter;

    printf("How many subjects do you have? ");
    scanf("%d", &subjectsCount);

    for (int i = 1; i <= subjectsCount; i++) {

        printf("\nEnter the number of hours for your %d subject: ", i);
        scanf("%d", &hours);
        printf("Enter the grade letter for your %d subject: ", i);
        scanf("%s", &gradeLetter);
        printf("\n");
        
        if (gradeLetter == 'A' || gradeLetter == 'a') {
            points = 4;
        } else if (gradeLetter == 'B' || gradeLetter == 'b') {
            points = 3;
        } else if (gradeLetter == 'C' || gradeLetter == 'c') {
            points = 2;
        } else if (gradeLetter == 'D' || gradeLetter == 'd') {
            points = 1;
        } else if (gradeLetter == 'F' || gradeLetter == 'f') {
            points = 0;
        }
        
        //At each iteration, this variable adds up the previous value for each subject
        qualityPoints = hours * points;
        totalHours += hours;
        totalQualityPoints += qualityPoints;

    }

    printf("\nTotal hours: %.2f Total QP: %.2f ",totalHours, totalQualityPoints);

    finalGrade = totalQualityPoints / totalHours;
    printf("\nYour GPA is: %.2f ", finalGrade);
}
  • 希望读取单个字符,而不是字符串
  • 需要消耗/丢弃
    stdin中剩余的任何'\n'
  • 建议:

    scanf("%s", &gradeLetter);
    
    请注意使用了
    %c
    输入格式转换说明符

    请注意转换说明符前面的空格,以使用任何前导的“空白”,如
    stdin中剩余的“\n”

    关于类似于以下内容的一组声明:

    scanf(" %c", &gradeLetter);
    
    建议用一句话取代整个小组:

    if (gradeLetter == 'A' || gradeLetter == 'a') {
    
    #包括
    ....
    分数=5-(低于(成绩字母)-“a”);
    ....
    
    明白了!谢谢伙计!此“更正”将读取上次调用
    scanf(“%d”、&hours)时的剩余“\n”);
    因为
    %c
    输入格式转换说明符没有消耗/丢弃前导的“空白”@user3629249我说过其他的吗?这个问题在我链接的主题中得到了充分的解决。它被认为是指向另一个页面的“非主题”链接到“仅”链接。答案应该包括链接页面的相关文本和建议的cod答案中的e不正确。
    #include <ctype.h>
    ....
    points = 5 - (tolower( gradeLetter ) - 'a' );
    ....