我正在编写一段代码,在检查它是否有错误时,我发现由于某种原因,
\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);
}
}
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);