Notepad ++和NppExe没有显示输出

问题描述 投票:1回答:1

我想学习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/%d\n", month1, day1, year1, month2, day2, year2);

   else
   printf("%d/%d/%d is earlier than %d/%d/%d\n",month2, day2, year2, month1, day1, year1);

   getchar();
  return 0;

  }

当按下F6时,会出现命令提示,它会询问日期,并在输入第二个日期提示后按Enter键,而不会在任何地方显示输出。

c notepad++ mingw-w64
1个回答
2
投票

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

我真的不明白你的意思是出现命令提示符并接受所有输入,但是从控制台立即关闭的行为来判断,这是因为控制台在程序退出后立即关闭。

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

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

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

#include <stdio.h>

int main(void)
{
    printf("hello world\n");

    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键。


Fotenotes

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

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

© www.soinside.com 2019 - 2024. All rights reserved.