读取Char值后,C程序int变量值将发生更改

时间:2018-07-10 11:21:15

标签: c

我是C编程的新手,我刚刚创建了一个小型计算器应用程序,但我注意到当我在读取Int Values后读取char值时,下一个Int变量将发生更改。发生这种情况的原因是什么?这是我的代码

{
    "error": true,
    "message": "Error while insertion. Erron in the query",
    "data": "An exception occurred while executing 'INSERT INTO \"user\" (...) VALUES (...)' with params [...]:\n\nSQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for integer: \"default\"" }

3 个答案:

答案 0 :(得分:1)

此处您必须使用scanf("%c", &opr);而不是scanf("%s", &opr);,因为 opr char,因此您必须使用%c,{{1} }用于扫描String。然后出现未处理的%s问题。因此,在'\n'的前面添加一个额外的'\n',因此该语句变为%c;

修改后的代码:-

scanf("\n%c", &opr);

输出:-

#include <stdio.h>

int main()
{
    int num1;
    int num2;
    char opr;
    int ans;

    printf("Enter the first number : ");
    scanf("%d", &num1);

    printf("Enter the second number : ");
    scanf("%d", &num2);

    printf("Enter the operater : ");
    scanf("\n%c", &opr); // not scanf("%s", &opr);

    printf("%d \n", num1);
    printf("%d \n", num2);

    switch (opr)
    {
    case '+':
        ans = num1 + num2;
        printf("The addtion of %d and %d is %d", num1, num2, ans);
        printf("\n");
        break;

    case '-':
        ans = num1 - num2;
        printf("The substractuon of %d from %d is %d", num2, num1, ans);
        printf("\n");
        break;

    case '*':
        ans = num1 * num2;
        printf("The multiplication of %d and %d is %d", num1, num2, ans);
        printf("\n");
        break;

    case '/':
        ans = num1 / num2;
        printf("The substraction of %d from %d is %d", num1, num2, ans);
        printf("\n");
        break;
    }

    return 0;
}

答案 1 :(得分:0)

使用scanf("%c", &opr)读取单个char

使用%s将读取以NUL结尾的字符串,但是只有一个字节不足,这将导致不确定的行为。

实际上是在将NUL终止符写在int旁边的opr变量的最高一个字节上。

答案 2 :(得分:-1)

如其他人所述,使用%c读取一个字符:

但是您使用了%s,所以发生的事情是scanf读取了一个字符串。假设您的示例输入的内容为普通字符,将读取一个字符和一个换行符。然后,Scanf写入char和给定地址的终止0字节,这就是您的char。

但是一个字符只有一个字节大,另一个字符溢出到存储器中的下一个字节。在您的情况下,这恰好是int变量。这被称为缓冲区溢出,是使用scanf的危险之一。