Eclipse CDT Mars:从文件输入

我最近安装了Eclipse CDT Mars版本来运行C程序。 我在从文件中获取输入时遇到问题。 所以,我有一个看起来像这样的程序:

int main(void) { //Declarations int number_of_segments; int k_constraint; segment_node *ptr_to_segment_array, *ptr_to_segment_sorted_array; int no_of_coordinates; int *ptr_to_solution_array; int *ptr_to_list_of_segment_identifiers_currently; int no_of_identifiers_currently=1; int i,j=1,k=0, l=0; //setvbuf(stdout, NULL, _IOLBF, 0); //Input printf("Enter the number of segments\n"); scanf("%d", &number_of_segments); printf("Enter the k constraint \n"); scanf("%d", &k_constraint); no_of_coordinates = number_of_segments*2; //Dynamically allocate memory to the Array ptr_to_segment_array = (segment_node*)malloc(sizeof(segment_node)*no_of_coordinates); ptr_to_segment_sorted_array = (segment_node*)malloc(sizeof(segment_node)*no_of_coordinates); ptr_to_solution_array = (int*)malloc(sizeof(int)*no_of_coordinates); ptr_to_list_of_segment_identifiers_currently = (int*)malloc(sizeof(int)*number_of_segments); /*Now, input the individual segments's coordinates from left to right ** while also assigning the unique numbers to an individual segments' coordinates*/ printf("Enter the coordinates of segments from left to right \n"); for(i=0; i<no_of_coordinates; i++,j++){ scanf(" %d", &(ptr_to_segment_array[i].coordinate)); if(j==1){ ptr_to_segment_array[i].position = 'l'; ptr_to_segment_array[i].identifier = i+1; } else if(j==2){ ptr_to_segment_array[i].position = 'r'; ptr_to_segment_array[i].identifier = i+1; } if(j==2){ //Reset j=1; } } return 0; } 

嗯,当然不是整个计划。 这是它的一瞥。 问题是scanf语句应该接受输入,我希望从文件中获取输入。 所以,我做了以下事情:

  1. 首先,我在工作区目录本身中创建了一个包含以下内容(输入)的文本文件。
    3
    2
    -3
    2
    0

    3
    8
  2. 然后,我将Eclipse配置为从控制台获取输入。 在此处输入图像描述

请注意,编码已设置为MS932(默认)

现在,我构建并调试它。 我进入输入步骤。 然后,我等了几分钟而没有。 而已。 该计划似乎需要很长时间,但控制权不会转移到下一行。

现在,您可能认为程序本身存在一些错误,是的,但是我也可以在Ideone.com上使用自定义输入运行此程序,它确实需要输入。 此外,我使用来自Console的输入运行此程序,它确实一步一步地正确输入。

那么,为什么它不会直接以这种方式从文件中获取输入呢? 它是Notepad / Eclipse或其他什么的编码问题吗?

任何帮助表示赞赏。
顺便说一句,如果有人想要完整的程序,我很乐意提供它。 它不是一些专有内容。 我纯粹是出于教育目的写作解决某些问题。

我没有看到你告诉你的程序从文件中读取。 所以它只是等待你的输入。
你应该在开头添加:

 freopen("input.txt", "r", stdin); 

它做什么:它reopen stdin文件描述符并将input.txt附加到它。 它附着它用于阅读 – 第二个参数是"r"

但是,如果您希望能够从控制台AND文件中读取,则需要再添加一个:

 FILE *in; in = fopen("input.txt", "r"); 

你应该用fscanf(in, ...)替换scanf(...) fscanf(in, ...)

 fscanf(in, "%d", number);