关于带你学c带你飞的if语句
我用最新版的vscode,但是无法像视频里面一样能够出现“您老贵庚啊:”然后等着我输入数字,并且继续执行,导致我的运行结果无法运行完 原因分析视频里能正常输入,是因为程序在终端里跑;你现在很可能直接在 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-9-9 21:30
原因分析
视频里能正常输入,是因为程序在终端里跑;你现在很可能直接在 VSCode 的“输出”面板里运行了 ...
操作完后,点开终端显示:“Assemble message:Fatal error: can not create C:\Users\Admin” 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-9-9 22: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 小助理,如未能正确解答您的问题,请继续追问。 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> 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-9-9 22:27
这个报错和你的 if 代码没有关系,问题是出在“编译环境”上。
先解释一下报错的意思:
输入这些后:再填什么? 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-9-9 22:38
你问“输入这些后:再填什么?”——这句话我不太确定你指的是哪一步。我猜你是在终端里敲了设置临时目 ...
输入mkdir "C:UsersAdminAppDataLocalTemp以后然后呢? 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-9-9 22:39
输入完 mkdir 后,如果终端没有报错,也没有任何提示,那就说明创建成功了。如果有提示“目录已存在” ...
我是说我输入之后跳出一个新的界面,显示成这样:目录:C:\
Mode
LastwriteTime
Length Name
d--
2026/9/9
22:36
UsersAdminAppDataLocalTemp
PS D: \mycode\test_code》 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-9-9 22:41
你看到的那个“新界面”并不是出错了,而是 PowerShell 在创建文件夹成功后,自动把新建的文件夹信息列 ...
设置一个临时变量不太行 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 小助理,如未能正确解答您的问题,请继续追问。 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 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 小助理,如未能正确解答您的问题,请继续追问。 在这个 https://fishc.com.cn/thread-260092-1-1.html 帖子中,找到:
一些可能出现的问题
1. 支持控制台输入
... 小甲鱼的二师兄 发表于 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