如何阻止将 scanf 中的换行符输入到在 scanf 输入后立即填充的字符数组中?

问题描述 投票:0回答:1

我正在编写一段代码,在检查它是否有错误时,我发现由于某种原因,

\n
被输入到名为
num
的字符数组中的第一个位置
main()
中。它与
scanf
有关,因为当我将其注释掉时,它会按预期工作。我可以使用
isdigit
isalpha
,但这似乎不是一个特别有效的解决方案。如何防止将换行符输入到 char 数组中?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define LEN 10000

int expon(int expBase, int power){
    unsigned int i=1;
    int j;
    for(j=0; j<power; j++) i*=expBase;
    return i;
}
void convToNums(char* num, int* numI, int length){
    int i;
    for(i=0; i<length; i++){
        if(isdigit(num[i])) numI[i]=num[i]-'0';
        if(isalpha(num[i])) numI[i]=num[i]-'A'+10;
    }
}

void convert(char* num, int base1, int base2, int length){
    int numI[LEN];
    int i;
    convToNums(num, numI, length);
    for(i=0; i<length; i++) printf("%d", numI[i]);
    printf("\n");

}

int getNum(char *num){
    char c;
    int i=0;
    while((c=fgetc(stdin)) != ' '){
        num[i]=c;
        i++;
    }
    return i;
}

int main(){
    char num[LEN];
    int n, base1, base2, length;
    scanf("%d", &n);
    for(int i=0; i<n;i++){
        length=getNum(num);
        scanf("%d %d", &base1, &base2);
        convert(num, base1, base2, length);
    }
}
arrays c scanf
1个回答
1
投票

scanf("%d", &n);
当它在读取的数字后面看到非数字字符时停止,因此当它看到换行符并将该字符留在缓冲区中时它会停止。

自行删除:

// Get the next character to see what it is.
int c = getchar();

// If there is another character and it is not newline, put it back.
if (c != EOF && c != '\n')
    ungetc(c, stdin);
© www.soinside.com 2019 - 2024. All rights reserved.