输入后的程序块

时间:2015-05-24 11:39:56

标签: c arrays gcc scanf

此代码会在scanf()之后立即阻止:

int main(int argc, char *argv[]) {
    puts("Algorithms test kit");
    long input_size;
    FILE *output=fopen("output.txt","w+");
    do {
        printf("Enter sample size(0 goes on to next test) > ");
        scanf (" %li ",&input_size);
        printf ("#");
        if (input_size==0) break;
        int64_t *data=sorting_prepare_data(input_size);
        int64_t *bsort_copy=calloc(input_size,8);
        int64_t *qsort_copy=calloc(input_size,8);
        memcpy(bsort_copy,data,input_size*8);
        bubblesort(bsort_copy,input_size);
        memcpy(qsort_copy,data,input_size*8);
        quicksort(qsort_copy,input_size);       
        for (size_t i=0;i<input_size;i++) {
             fprintf(output,"%lld\t%lld\t%lld\n",data[i],bsort_copy[i],qsort_copy[i]);
             printf(".");
        }
        free(data); free(bsort_copy); free(qsort_copy);
    } while (input_size);
    return;
}

其中bubblesort()quicksort()是各自算法的手写实现,sorting_prepare_data()是一个辅助函数,在数组上调用自定义构建的PRNG。阻塞的可能原因是什么?该程序已使用GCC编译,未产生任何错误。

1 个答案:

答案 0 :(得分:3)

我试过你的代码并设法重现奇怪的行为。如果您移除" "周围的"%li",它就不会再阻止。

问题是空格,因为scanf期望输入也匹配空白区域。

来自scanf文档:

  

所有          转化由%(百分号)字符引入。格式字符串还可以包含其他字符。白色空间(如    格式字符串中的空格,制表符或换行符匹配任意数量的          输入中的空格,包括无空格。其他一切都匹配          只有它自己。当输入字符不匹配时,扫描停止          这样的格式字符。 输入转换时扫描也会停止          无法制作

来源:http://www.manpages.info/linux/scanf.3.html