C语言 记事本++和NppExe没有向我显示输出



我想学习C。我想让我的记事本++来编译和运行我的.c文件。我已经做了需要做的事情。我正在使用MinGW并添加了插件。我添加了这个提示:

npp_save
cd "$(CURRENT_DIRECTORY)"
gcc -Wall -Werror "$(FILE_NAME)" -o $(NAME_PART) -march=native -O3
NPP_RUN $(NAME_PART)

但是每当我去编译和运行时,都会出现一个命令提示符并接受所有输入。但是当需要向我显示输出命令提示符时,就会关闭。此外,记事本++中嵌入的控制台上也没有输出。然后,我必须使用Windows cmd来执行。有人可以帮我吗?我是初学者。

例如,看看这个:

#include <stdio.h>
/* Note: Program assumes years are in the same century. */
int main(void)
{
int month1, day1, year1, month2, day2, year2;
int first_earlier = 0;
printf("Enter first date (mm/dd/yy): ");
scanf("%d/%d/%d", &month1, &day1, &year1);
printf("Enter second date (mm/dd/yy): ");
scanf("%d/%d/%d", &month2, &day2, &year2);
if (year1 != year2)
first_earlier = year1 < year2;
else if (month1 != month2)
first_earlier = month1 < month2;
else
first_earlier = day1 < day2;
if (first_earlier)
printf("%d/%d/%d is earlier than %d/%d/%dn", month1, day1, year1, month2, day2, year2);
else
printf("%d/%d/%d is earlier than %d/%d/%dn",month2, day2, year2, month1, day1, year1);
getchar();
return 0;
}

按 F6 时,会出现命令提示符,它会询问日期,输入第二个日期提示后按 Enter 时,关闭时,任何地方都没有向我显示输出。

首先,g++是C++编译器。如果你有C代码,那么你必须 使用gcc编译 C 代码。

我真的不明白你所说的命令提示符出现并采取的意思 所有输入,但从控制台关闭的行为来看 立即,这是因为控制台在程序结束后立即关闭 出口。

双击(控制台)可执行文件时,将生成一个终端并 它执行您的程序(而不是命令行)。终端的正常行为是当 执行的程序存在,终端关闭。这也会发生在以下情况下 通过 IDE 启动程序。

如您所见,如果您打开一个终端并从那里执行它,则终端 保持打开状态,因为命令行仍处于活动状态1

如果要通过双击或IDE启动程序,则必须使 确保您的程序不会立即退出。一个简单的方法是 让用户等待输入。

#include <stdio.h>
int main(void)
{
printf("hello worldn");
puts("Press Enter to continue...");
getchar();
return 0;
}

在这里,getchar将等待用户输入,并在用户按Enter后退出。这是通过以下方式启动控制台程序的解决方法 双击和 IDE。但是我认为这是不好的做法,正确的方法 将是自己启动终端并自己执行程序。

许多终端可以选择在以下情况下不会立即关闭 正在运行的程序结束。为此,您应该能够检查 终端。有时,IDE 在设置中也有一个复选框,您必须这样做 检查终端不会立即关闭。

编辑

最后getchar之所以不等,是因为之前的scanf.

当您在命令行中输入某些内容时,还会添加一个换行符 ('n') 到输入流。

scanf("%d/%d/%d", &month2, &day2, &year2);

如果格式正确,scanf将消耗所有输入,但留下 输入缓冲区中的换行符。最后一个getchar()将使用换行符 已经在缓冲区中,因此它不会等待进一步的用户 输入。

您必须清除输入缓冲区。在main之前添加此函数:

void clear_stdin(void)
{
int c;
while((c = getchar()) != 'n' && c != EOF);
}

scanf调用之后调用它:

printf("Enter first date (mm/dd/yy): ");
scanf("%d/%d/%d", &month1, &day1, &year1);
clear_stdin();
printf("Enter second date (mm/dd/yy): ");
scanf("%d/%d/%d", &month2, &day2, &year2);
clear_stdin();

现在输入缓冲区已清除,最后一个getchar将等待更多用户 输入和程序将阻止,直到您按 ENTER 键。


福特诺斯

1请注意,终端(控制台)与命令不同线。终端是显示文本并允许用户 用键盘键入。命令行只是一个程序,允许您 输入命令并启动程序。在Windows中,命令行是cmd.exe称为命令行,它主要在C:WindowsSystem32中找到。

默认设置是,当您打开终端而不告诉哪个终端时 命令来执行,它会自动打开一个命令行,在Windows中会 默认为cmd.exe

最新更新