1

我正在尝试填充一个 char 数组,但由于某种原因,每次我按 Enter 键时都会将换行符输入到数组中,这意味着我的数组的一半是 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 应该解决这个问题。这是一门入门课程,所以应该不会那么难。

4

1 回答 1

3

在说明符之前放置一个空格,以在每次按下循环时%c吃掉留下的\n字符 ( )。改变 <Return>scanfwhileEnter

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

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

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


根据OP的评论;

如果我在命令提示符下怎么办?就 tkinter 而言,这就是我使用的,所以我认为它与 C 相同。我猜实际放入的内容是 ASCII 代码 10,即换行符。<Return>和 和有什么不一样LF

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

于 2013-10-12T22:48:45.213 回答