DarlingPeterson 发表于 2026-9-9 21:30:02

关于带你学c带你飞的if语句

我用最新版的vscode,但是无法像视频里面一样能够出现“您老贵庚啊:”然后等着我输入数字,并且继续执行,导致我的运行结果无法运行完

FishC 发表于 2026-9-9 21:30:24

原因分析
视频里能正常输入,是因为程序在终端里跑;你现在很可能直接在 VSCode 的“输出”面板里运行了。这个面板只能显示输出,不能把你键盘输入的内容传给 scanf,所以程序就卡在“等输入”这一步,后面的 if 语句自然执行不完。

关键:scanf 需要“终端”支持,不能只看“输出”面板。

推荐写法示范
为了确保“您老贵庚啊:”先显示出来,再等待输入,建议加一句 fflush(stdout):

#include <stdio.h>

int main()
{
    int age;

    printf("您老贵庚啊:");
    fflush(stdout);   // 强制把提示语立刻显示出来

    scanf("%d", &age);

    if (age >= 60)
    {
      printf("老当益壮!\n");
    }
    else if (age >= 18)
    {
      printf("成年人了\n");
    }
    else
    {
      printf("小朋友好\n");
    }

    return 0;
}


解决办法一:在 VSCode 的终端里手动编译运行


[*]打开 VSCode,按 Ctrl+` 调出“终端”。
[*]在终端里先切换到代码所在目录,例如:cd 你的代码目录
[*]输入编译命令:gcc 文件名.c -o 文件名
[*]再输入执行命令。Windows 下输:文件名.exe;Mac/Linux 下输:./文件名


然后程序就会在终端里等待你输入,后面的 if 也就能继续执行了。

解决办法二:设置 Code Runner 在“终端”里运行

如果你用的是 Code Runner 插件,可以这样设置:


[*]按 Ctrl+, 打开设置。
[*]搜索:code-runner.runInTerminal
[*]把它打勾。
[*]重新运行“Run Code”。


打勾后,程序就会在“终端”中运行,不再跑到“输出”面板,scanf 也就能正常接收你输入的数字了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:13:24

FishC 发表于 2026-9-9 21:30
原因分析
视频里能正常输入,是因为程序在终端里跑;你现在很可能直接在 VSCode 的“输出”面板里运行了 ...

操作完后,点开终端显示:“Assemble message:Fatal error: can not create C:\Users\Admin”

FishC 发表于 2026-9-9 22:13:43

DarlingPeterson 发表于 2026-09-09 22:13
FishC 发表于 2026-9-9 21:30
原因分析
视频里能 ...

这个报错的意思是:编译工具想在一个地方生成中间文件,结果没权限或者路径不对。

常见原因有两种:


[*]你敲的编译命令里,-o 后面的内容写成了文件夹(比如 C:\Users\Admin),而它应该是具体的输出文件名。
[*]当前目录不可写,或者杀毒软件拦截了编译器生成文件。


解决办法很简单,按这个格式做就行:

先在 VSCode 里按 Ctrl+` 打开终端,然后一条一条敲:


cd 你的代码文件夹
dir


先看看你的 .c 文件是不是真的在当前目录。然后编译时,把输出文件名写明确,比如:


gcc test.c -o test.exe
test.exe


注意 -o test.exe 这里不能只写个目录,也不能漏掉文件名。

如果你用的是 Code Runner,请检查设置里 C 语言的编译命令有没有被改成乱七八糟的东西。最简单的方法:不要点右上角的运行按钮,直接在终端用上面的命令编译运行,这样最稳妥。

如果还是报同样的错,那就是权限问题。建一个新的文件夹,比如:


mkdir C:\CProject


然后把源码复制进去,再进入这个文件夹编译试试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:17:44

FishC 发表于 2026-9-9 22:13
这个报错的意思是:编译工具想在一个地方生成中间文件,结果没权限或者路径不对。

常见原因有两种: ...

没太听懂,再详细一点

FishC 发表于 2026-9-9 22:18:13

DarlingPeterson 发表于 2026-09-09 22:17
FishC 发表于 2026-9-9 22:13
这个报错的意思是:编 ...

这个报错的核心原因是:你在用编译命令时,把 `-o` 后面的内容写成了一个文件夹(比如 `C:\Users\Admin`),而不是一个具体的文件名。编译器想“创建”一个文件,但发现那个位置已经有一个文件夹存在,所以直接报错“无法创建”。

下面我分几步详细解释,慢慢看。

---

一、先弄懂你做了什么

你在终端里大概执行过类似这样的命令:

gcc 你的程序.c -o C:\Users\Admin

这条命令的意思是:让 gcc 编译你的程序,然后生成的程序名字叫 `C:\Users\Admin`。
可问题是:`C:\Users\Admin` 是你的用户文件夹啊!它不是文件,是一个目录。
编译器想往“这个目录里”写一个文件,但你把目录本身当成文件名,于是它就慌了,报错。

正确的做法是让 `-o` 后面接一个“文件名”,例如:

C:\Users\Admin\我的程序.exe

或者简单一点,就输出到当前目录:

test.exe

---

二、正确的手动编译步骤

假设你的源文件叫 test.c,现在请按下面步骤操作,不要漏任何一步。


[*]打开终端:在 VSCode 里按 Ctrl+`(键盘左上角那个撇号键)。
[*]进入你的代码文件夹。比如你的 test.c 在桌面上,就输入:
cd Desktop
如果不在桌面,而是在D盘某个文件夹,比如 D:\\学习C语言,那就先敲:
D:
然后再敲:
cd 学习C语言
[*]确认文件在不在当前目录。输入:
dir
看看列表里有没有 test.c。
[*]执行编译命令。注意看 -o 后面写的是什么:
gcc test.c -o test.exe
这条命令的意思是:编译 test.c,生成一个叫 test.exe 的程序文件。
[*]运行生成的程序。输入:
test.exe
然后程序就会显示“您老贵庚啊:”并等待你输入数字。


如果你之前编译失败时,用的是类似 gcc test.c -o C:\\Users\\Admin 这种命令,请立刻改成上面的写法。

---

三、如果你还是想用 Code Runner 那个三角形按钮

请先检查 Code Runner 的设置:


[*]按 Ctrl+, 打开设置。
[*]搜索 runInTerminal,确保它被勾选。
[*]然后搜索 executorMap,点击“在 settings.json 中编辑”。
[*]找到类似这样的代码:
"code-runner.executorMap": {
    "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $fileNameWithoutExt"
}
请注意,这一段里不应该出现任何像 C:\\Users\\Admin 或 $dir 作为 `-o` 参数的写法。
如果你看到哪里不对,就把整段 `"code-runner.executorMap"` 删除,然后保存,Code Runner 会恢复默认设置。


之后重新点三角形按钮,应该就可以正常输入了。

---

四、最终提醒

记住一条:
-o 后面永远跟“文件名”,不要跟“文件夹名”。
比如 -o test.exe 是合法的。
但 -o C:\\Users\\Admin 是错的。

如果你把代码放在 C:\\Users\\Admin 这个目录下,编译命令这样写也可以:

gcc test.c -o C:\Users\Admin\test.exe

注意看:最后是 \\test.exe,这叫“在Admin文件夹里生成test.exe”,而不是“生成Admin这个文件”。

你先试试手动编译方式,不要再点三角形按钮。按照我上面的步骤一条一条敲,如果还有报错,把终端里显示的完整内容发出来,我们再一起分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:26:52

FishC 发表于 2026-9-9 22:18
这个报错的核心原因是:你在用编译命令时,把 `-o` 后面的内容写成了一个文件夹(比如 `C:%users\Admin ...

我的终端中,完整的代码是这样的:
PS D: \mycode\test_code> cd "d: \mycode\test code\" ; if ($?) { gcc test.c -o test } ; if ($?) { \test }
Assembler messages:
Fatal error: can't create C:\Users\Admin
PS D: \mycode\test_code>

FishC 发表于 2026-9-9 22:27:15

DarlingPeterson 发表于 2026-09-09 22:26
FishC 发表于 2026-9-9 22:18
这个报错的核心原因是 ...

这个报错和你的 if 代码没有关系,问题是出在“编译环境”上。

先解释一下报错的意思:
编译程序时,系统需要借助一个“临时文件夹”来存放中间文件。你的电脑告诉编译器:“去 C:UsersAdmin 这个文件夹里建临时文件吧。” 结果编译器发现那个位置不能建文件,于是报错:Fatal error: can't create C:UsersAdmin。

也就是说,不是你的代码写错了,而是编译器找不到能用的临时目录。

下面给出最简单的解决办法,请一步步操作。

第一步,打开 VSCode 里的终端:按键盘上的 Ctrl + ~(~ 键在数字 1 左边)。

第二步,在终端里输入下面这行命令,查看一下当前的临时目录指向哪里:

echo $env:TEMP

如果显示的结果是 C:UsersAdmin 或者显示什么都不对,那就执行下面两条命令,把临时目录改到一个肯定能用的位置:

$env:TEMP = "C:UsersAdminAppDataLocalTemp"
$env:TMP = $env:TEMP

如果提示找不到 AppDataLocalTemp 这个文件夹,就先执行下面这条命令创建它:

mkdir "C:UsersAdminAppDataLocalTemp"

第三步,重新编译你的程序。建议手动输入下面两行命令,一行一行来:

gcc test.c -o test.exe

.\test.exe

注意:第一行命令是“编译”,第二行是“运行”。如果编译时还报错,就说明不是临时目录的问题,而是你的代码文件本身就有问题。可以先把代码发出来,我们再一起看。

另外,建议你把代码文件放到一个路径简单的位置,比如在终端里执行:

cd D:\mycode\test_code

然后再执行上面的编译和运行命令。

最后再提醒一句:你的 if 语句逻辑本身没有问题,只要能把程序正常跑起来,就可以看到“您老贵庚啊:”然后输入数字,后面的 if 判断也会正常执行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:37:56

FishC 发表于 2026-9-9 22:27
这个报错和你的 if 代码没有关系,问题是出在“编译环境”上。

先解释一下报错的意思:


输入这些后:再填什么?

FishC 发表于 2026-9-9 22:38:01

DarlingPeterson 发表于 2026-09-09 22:37
FishC 发表于 2026-9-9 22:27
这个报错和你的 if 代 ...

你问“输入这些后:再填什么?”——这句话我不太确定你指的是哪一步。我猜你是在终端里敲了设置临时目录的命令后,不知道该接着输入什么了。下面我把完整流程从头到尾给你列一遍,你照着一次做完就行。

完整流程(一条一条输)


[*]在 VSCode 中按 Ctrl + ~ 打开终端。
[*]进入你的代码目录,输入(注意你的路径里可能有多余空格,建议手动输入):cd D:\mycode\test_code 然后回车。
[*]设置临时目录,输入:$env:TEMP = "C:\Users\Admin\AppData\Local\Temp" 然后回车。
[*]继续输入:$env:TMP = $env:TEMP 然后回车。
[*]开始编译,输入:gcc test.c -o test.exe 然后回车。



[*]如果上面这步没有报错,就运行程序,输入:.\test.exe 然后回车。此时屏幕上会出现“您老贵庚啊:”,你输入数字再回车就行了。


注意:如果你执行到第3、4步时,终端里没有显示任何提示,那是正常的。只要不报错就继续下一条。如果你在第5步编译时报错,请把终端里显示的完整错误信息发出来,我再帮你看。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:39:03

FishC 发表于 2026-9-9 22:38
你问“输入这些后:再填什么?”——这句话我不太确定你指的是哪一步。我猜你是在终端里敲了设置临时目 ...

输入mkdir "C:UsersAdminAppDataLocalTemp以后然后呢?

FishC 发表于 2026-9-9 22:39:14

DarlingPeterson 发表于 2026-09-09 22:39
FishC 发表于 2026-9-9 22:38
你问“输入这些后:再 ...

输入完 mkdir 后,如果终端没有报错,也没有任何提示,那就说明创建成功了。如果有提示“目录已存在”之类也没关系,可以继续。

接下来按顺序输入下面两条命令,用来设置临时文件夹路径(注意路径里的反斜杠不能漏,不然会出错):

$env:TEMP = "C:\Users\Admin\AppData\Local\Temp"

$env:TMP = $env:TEMP

然后开始编译你的源码,输入:

gcc test.c -o test.exe

编译如果没有报错,就运行程序:

.\test.exe

这个时候屏幕上就会显示“您老贵庚啊:”,你输入一个数字,再按回车键,程序就能继续往下执行 if 判断了。

另外提醒一下:你上面写的 mkdir 命令里,路径可能少写了反斜杠。正确写法是:

mkdir "C:\Users\Admin\AppData\Local\Temp"

如果刚才输入的命令缺少了反斜杠,请重新执行一次上面的正确版本,再继续后面的操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:40:58

FishC 发表于 2026-9-9 22:39
输入完 mkdir 后,如果终端没有报错,也没有任何提示,那就说明创建成功了。如果有提示“目录已存在” ...

我是说我输入之后跳出一个新的界面,显示成这样:目录:C:\

Mode

LastwriteTime

Length Name

d--

2026/9/9

22:36

UsersAdminAppDataLocalTemp

PS D: \mycode\test_code》

FishC 发表于 2026-9-9 22:41:10

DarlingPeterson 发表于 2026-09-09 22:40
FishC 发表于 2026-9-9 22:39
输入完 mkdir 后,如果 ...

你看到的那个“新界面”并不是出错了,而是 PowerShell 在创建文件夹成功后,自动把新建的文件夹信息列出来给你看。这是正常现象,不用管它。

不过根据截图,你之前执行 mkdir 时命令里的反斜杠少了,导致它在 C 盘下新建了一个名字叫 UsersAdminAppDataLocalTemp 的文件夹,而不是系统标准的临时文件夹。这个不影响后续操作,我们继续把临时目录改成标准位置就行。

请依次输入下面几条命令,每输完一条按一次回车:

第一条,设置临时目录:

$env:TEMP = "C:\Users\Admin\AppData\Local\Temp"

第二条,设置另一个临时变量:

$env:TMP = $env:TEMP

第三条,编译你的程序:

gcc test.c -o test.exe

如果第三条没有报错,第四条运行程序:

.\test.exe

这时候窗口里应该会出现“您老贵庚啊:”,你输入一个数字再按回车,后面的 if 语句就会正常执行了。如果编译时还有红色错误提示,请把完整错误发出来。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:49:55

FishC 发表于 2026-9-9 22:41
你看到的那个“新界面”并不是出错了,而是 PowerShell 在创建文件夹成功后,自动把新建的文件夹信息列 ...

设置一个临时变量不太行

FishC 发表于 2026-9-9 22:50:16

DarlingPeterson 发表于 2026-09-09 22:49
FishC 发表于 2026-9-9 22:41
你看到的那个“新界面 ...

你遇到的“设置临时变量不太行”,很可能是因为 PowerShell 命令里反斜杠没有敲对,或者设置后没有在同一个终端里编译运行。别急,我们用更稳妥的方法一步到位。

第一步:先查看当前的临时目录是什么

在 VSCode 终端里输入:

echo $env:TEMP

如果显示的是 C:\Users\Admin 或者类似“没有反斜杠、没有子目录”的路径,那问题就出在这里。gcc 在编译时需要临时目录,但它发现你给的路径没法创建文件,于是报错“Fatal error: can’t create”。

第二步:用系统设置永久修复临时目录

最可靠的方法是修改 Windows 环境变量,而不是只在 PowerShell 里临时改。

按 Win 键,输入“环境变量”,选择“编辑系统环境变量”。
点击右下角的“环境变量”。
在“用户变量”里找到 TEMP 和 TMP,分别选中并点“编辑”。
把变量值改成:

%USERPROFILE%\AppData\Local\Temp

改完后点“确定”,然后完全关闭 VSCode,再重新打开。

第三步:如果不想重启 VSCode,就在终端里输入下面两条命令,注意不要漏反斜杠

$env:TEMP = "C:\Users\Admin\AppData\Local\Temp"

$env:TMP = $env:TEMP

输入后按回车,如果没有任何提示就说明设置成功。

第四步:重新编译运行你的程序

现在请手动输入下面的命令,逐条执行:

gcc test.c -o test.exe

.\test.exe

第一条是编译,第二条是运行。如果编译时报错,就把错误信息发出来;如果正常,你会看到“您老贵庚啊:”,输入数字再按回车就能继续 if 了。

第五步:顺手清理你之前误创建的文件夹

你之前执行 mkdir 时少打了反斜杠,可能会在 C 盘根目录生成一个名为 UsersAdminAppDataLocalTemp 的文件夹。建议删掉:

Remove-Item -Recurse -Force C:\UsersAdminAppDataLocalTemp

删除后不影响任何内容。

最终提醒

以后编译时记住:-o 后面必须跟文件名,例如 test.exe,而不是目录名。
如果依然报错,请把完整的错误信息复制过来,我再帮你仔细看。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

DarlingPeterson 发表于 2026-9-9 22:52:33

FishC 发表于 2026-9-9 22:50
你遇到的“设置临时变量不太行”,很可能是因为 PowerShell 命令里反斜杠没有敲对,或者设置后没有在同 ...

我输入设置一个临时变量的时候,它显示这个怎么办?:env:TMP=env:TEMP:尤法将“env:TMP=env:TEMP"项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

所在位置行:1字符:1

+ env:TMP=env:TEMP

nnnnn

+ CategoryInfo

ObjectNotFound: (env:TMP=env:TEMP:String)[],CommandNotFoundException

+ FullyQualifiedErrorId : CommandNotFoundException

FishC 发表于 2026-9-9 22:52:39

DarlingPeterson 发表于 2026-09-09 22:52
FishC 发表于 2026-9-9 22:50
你遇到的“设置临时变 ...

你输入的时候漏掉了美元符号 `$`,所以 PowerShell 把 `env:TMP=env:TEMP` 当成了一个普通命令名,当然找不到它。

正确的写法是:

$env:TMP = $env:TEMP

注意看:变量名前面必须有 `$`,等号两边要有空格。你刚才输入的内容里一个 `$` 都没有,所以报错说“无法识别”。

请重新在终端里输入下面两条命令,每条输完按回车,只要不报红色错误就算成功:


$env:TEMP = "C:\Users\Admin\AppData\Local\Temp"
$env:TMP = $env:TEMP


然后再编译:


gcc test.c -o test.exe


编译成功后再运行:


.\test.exe


现在可以继续了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2026-9-10 01:39:30

在这个 https://fishc.com.cn/thread-260092-1-1.html 帖子中,找到:

一些可能出现的问题

1. 支持控制台输入

...

DarlingPeterson 发表于 2026-9-10 12:50:49

小甲鱼的二师兄 发表于 2026-9-10 01:39
在这个 https://fishc.com.cn/thread-260092-1-1.html 帖子中,找到:

开启之后再于终端运行出现了以下情况:
Assembler message:
Fatal error: can't create C:\Users\Admin                                 
页: [1] 2
查看完整版本: 关于带你学c带你飞的if语句