为什么我的char数组的一半是空格?

时间:2013-10-12 22:46:53

标签: c arrays

我正在尝试填充一个char数组,但由于某种原因,每次我点击输入它都会将Line Feed输入到数组中,这意味着我的数组的一半是LF。我尝试过fflush,但这似乎不起作用。

#include <stdio.h>
#include <stdlib.h>

void bubbleSortChar( char arr[], int size);
//The instruction say to get ch *then* call binarySearchCh, so I think you
//have to add a field.
void binarySearchCh(char arr[], int size,char val,int findall); 

main()
{
    char chArray[100];
    char ch;
    int i = -1;


    while(++i<100 && scanf("%c",&chArray[i]))
        fflush(stdin);

    bubbleSortChar(chArray,100);

    fflush(stdin);
    printf("Enter a char to find.");
    scanf("%c",&ch);

    binarySearchCh(chArray,100,ch,1);


}    

有没有办法在不每次手动删除空格的情况下执行此操作?我可以这样做,但似乎fflush应该照顾这个。这是一个介绍课程,所以不应该那么困难。

1 个答案:

答案 0 :(得分:3)

%c说明符之前放置一个空格以占用\n字符<Return>scanfwhile循环中按下每次输入。 改变

while(++i<100 && scanf("%c",&chArray[i]))

while(++i<100 && scanf(" %c",&chArray[i]))  

如果您不在MS-DOS上,fflush(stdin);将调用未定义的行为。


根据OP的评论;

  

如果我在命令提示符下怎么办?至于那就是我用于tkinter的东西,所以我认为对于C来说它是相同的。我想实际上放在那里的是ASCII代码10,它是换行符。 <Return>LF之间有什么区别?

不同的操作系统有不同的理解新线路的方式。 Mac 仅将\r理解为新行,而 Unix Linux \n理解为新行字符。 AFAIK,Windows需要将两个字符一起解释为新行,即\r\n(我不确定)。 这就是为什么在一个操作系统中创建的文件无法在另一个操作系统中正常打开并使其变得混乱的原因