You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode运行C语言时scanf无法赋值、printf输出异常问题求助

问题排查及解决方案

核心错误1:printf中错误使用取地址符&

你混淆了scanf和printf的参数规则:

  • C语言中&是取地址运算符,作用是获取变量在内存中的存储地址
  • scanf需要传入变量地址,是因为函数需要直接修改对应内存地址中存储的内容,完成用户输入的写入
  • printf只需要读取变量的值,直接传入变量名即可,加&会导致输出的是变量的内存地址而非存储的数值,这也是你遇到输出异常、编译器提示格式不匹配警告的直接原因

你需要删除所有printf语句中变量前的&,示例如下:
原错误写法:

printf("Die Zahl ist %i und die Genauigkeit %i\n\n", &a, &g);

修正后写法:

printf("Die Zahl ist %i und die Genauigkeit %i\n\n", a, g);

同理循环内的&i、&x,以及最终输出的&x都需要删掉前缀的&。

核心错误2:牛顿迭代逻辑错误

当前代码循环内每次执行t = a,相当于每次迭代都从初始值重新计算,完全没有迭代逼近的效果,需要把初始值赋值放到循环外,每次迭代更新迭代变量的值,修正后的逻辑如下:

// 初始值赋值放在循环外
t = a;
for(int i=0; i<g; i++)
{
    x = 0.5 * (t + (a/t));
    t = x; // 更新迭代变量,用于下一轮计算
    printf("Schritt Nr.: %d \n", i);
    printf("x%d: %f \n\n",i, x);
}

修复后的完整代码

#include <stdio.h>
#include <ctype.h>

int
main()
{
    float x; //Ergebnisvariable, Anfangswert
    float t; //Hilfsvariable zur Berechnung 
    int a; //Zahl zur Berechnung
    int g; //Genauigkeit (Anzahl der Durchgänge)
 
    printf(" Berechnung einer der Quadratwurzel einer Ganzzahl mit dem Newtonschen Annäherungsverfahren:\n\n");

    printf("Für welche Zahl soll angenähert die Quadratwurzel errechnet werden?\n");
    scanf("%i",&a);
    printf("Genauigkeit wählen (1,2,3,4)\n");
    scanf("%i",&g);

    printf("Die Zahl ist %i und die Genauigkeit %i\n\n", a, g);
    printf("Starte Berechnung für %d in %d Schritten.\n\n", a, g);
// Berechnung
    t = a;
    for(int i=0; i<g; i++)
        {
            x = (0.5)*(t+(a/t));
            t = x;
            printf("Schritt Nr.: %d \n", i);
            printf("x%d: %f \n\n",i, x);
        }
    printf("Endergebnis: %f \n\n", x);
}

该问题和VSCode配置、操作系统无关,属于C语言语法使用错误,编译器给出的警告已经明确提示传入的指针类型(int */float *)和格式符要求的数值类型不匹配。

内容的提问来源于stack exchange,提问作者Cassandra Schäwel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:36:08