Eclipse CDT Mars:从文件输入

时间:2016-01-03 08:15:57

标签: c eclipse user-input eclipse-cdt

我最近安装了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
    5
    3
    8
  2. 然后,我将Eclipse配置为从控制台获取输入。 enter image description here
  3. 请注意,编码已设置为MS932(默认)

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

您应该将scanf(...)替换为fscanf(in, ...)

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