存储program.exe已停止工作,我该如何解决?

时间:2015-06-08 19:23:57

标签: c printf scanf

我正在尝试编译以下代码。当我输入程序时,按下回车键后会出现一个显示

的弹出窗口
  

存储program.exe已停止工作

注意:我使用的是Windows 8.1

注意:我正在开发一个程序(用于超级商店),其中包括以下内容:

  • 产品代码
  • 产品名称
  • 产品价格
  • 总帐单计算

这只是一个开始。

#include <stdio.h>
int main (void)
{
  int d, code;
  char product[100], price[100];    
  printf("\t\t Welcome to the Metro Store\n\n\n\n Enter your product code: ");
  scanf("%d",code);

  if(code<100)
    printf("Pharmacy\n Name of the Medicine");

  fflush(stdout);

  fgets(product, 100, stdin);
  printf(product);  
  return 0;
}

2 个答案:

答案 0 :(得分:1)

对于初学者,你应该尝试

scanf("%d", &code);

您必须告诉scanf写入的位置。如果您没有指定&符号(&amp;),则scanf将不知道应该写入的位置。

你应该阅读docs,绝对是对指针的一个很好的介绍。如果你不理解指针,用C和C ++编程是毫无意义的; - )

然后,您可以将fgets()更改为scanf( "%s", product );

在这种情况下,scanf不需要&,因为product&product[0]的缩写。这可能会让人感到困惑,所以在继续之前先掌握指针。

答案 1 :(得分:0)

  • 首先,scanf()期望指针类型变量作为格式说明符的参数。使用

    scanf("%d", &code);
                ^^
    
  • 其次,请勿混淆scanf()fgets()。否则,fgets()最终只会消耗newline留下的scanf("%d"..)。尝试使用fgets()使用户输入更安全。但是,如果必须同时使用两者,请使用

    之类的内容
     scanf("%d", &code);
     int ch; while ((ch = getchar())!= EOF && ch != '\n');
     fgets(product,100,stdin);
    

    以避免剩余换行符出现问题。