C 我需要帮助。400万+;

C 我需要帮助。400万+;,c,ascii,C,Ascii,大多数字符看起来像一些随机数,而不是ascii值,这是为什么?为什么它仍然有效 #include <stdio.h> #include <conio.h> #define SIZE 10 void arrayFiller(int v[]); void charTimes(int v[]); void arrayPrinter(int v[]); void CharlessOn(int v[]); void stringToDigit(char string_num[

大多数字符看起来像一些随机数,而不是ascii值,这是为什么?为什么它仍然有效

#include <stdio.h>
#include <conio.h> 

#define SIZE 10

void arrayFiller(int v[]);
void charTimes(int v[]);
void arrayPrinter(int v[]);
void CharlessOn(int v[]);
void stringToDigit(char string_num[]);

int main() {
int vec[SIZE];
char string_num[50];
arrayFiller(vec);
arrayPrinter(vec);
charTimes(vec);
CharlessOn(vec);
gets(string_num);
stringToDigit(string_num);
}


void arrayFiller(int v[]) {
    printf("Please write down first a character and then number and repeat it 5 times, \nThe                         
    character represents the character you want to print,\nAnd the number is the number of times the 
    character will be printed.\n");
for (int i = 0; i < SIZE; i++) {
    int checker = 0;
    if (i % 2 == 0 || i == 0) {
        scanf("%c", &v[i]);
    }
    else {
        do {
            if (checker>0)
                printf("The number must be between 1 and 10,Try again please.\n");
            scanf("%d", &v[i]);
            checker++;
        } while (v[i] < 1 || v[i]>10);
        getchar();
    }
   }
 }

void charTimes(int v[]) {
    int k = 1;
    printf("\nHere is the Char few times\n");
    for (int i = 0; i < SIZE; i += 2) {
        for (int j = 0; j < v[k]; j++) {
            printf("%c,", v[i]);
        }
        k += 2;
    }

}

void arrayPrinter(int v[]) {
    printf("\n here is your array:\n");
    for (int i = 0; i < SIZE; i++) {
        printf("%d,", v[i]);
    }
}

void CharlessOn (int v[]) {
    int charless,k = 1;
    printf("\nPlease write down the character you want to get rid of:\n");
    scanf("%c", &charless);
    printf("%d", charless);
    printf("\nHere is the string without the char you chose:\n");
    for (int i = 0; i < SIZE; i += 2) {
        for (int j = 0; j < v[k]&& v[i]!=charless; j++) { 
            printf("%c,", v[i]);
        }
        k += 2;
    }
}

void stringToDigit(char string_num[]){
    int holder=0,number=0;
   for(int i = 0; string_num[i] != NULL;i++){
      number*=10;
    holder=string_num[i];
    holder-=48;
   number+=holder;
}
    printf("the number is %d",number);
}
#包括
#包括
#定义尺寸10
无效阵列填充器(INTV[]);
无效图表时间(INTV[]);
void数组打印机(int v[]);
无效字符(int v[]);
void stringToDigit(char string_num[]);
int main(){
int-vec[SIZE];
字符字符串_num[50];
arrayFiller(vec);
阵列打印机(vec);
charTimes(vec);
CharlessOn(vec);
获取(字符串_num);
stringToDigit(字符串数量);
}
无效数组填充器(int v[]{
printf(“请先写下一个字符,然后写下数字,然后重复5次,\n”
字符表示要打印的字符,\n数字是打印的次数
将打印字符。\n“;
对于(int i=0;i0)
printf(“数字必须介于1和10之间,请重试。\n”);
scanf(“%d”、&v[i]);
checker++;
}而(v[i]<1 | | v[i]>10);
getchar();
}
}
}
无效图表时间(整数v[]{
int k=1;
printf(“\n HERE是字符的几次\n”);
对于(int i=0;i
比如说,我的家庭作业已经完成了,但我遗漏了一个问题,所以我正在重做,我发现了一个问题,我写的第一个e有一个strage值,而第二个e也有starge值,它与scanf(%c,&v[i])中的第一个e不太一样,您应该为
%c
传递
字符的地址,但是
&v[i]
int
的地址
scanf
已经填充了
v[i]
的一个字节,其余的未初始化


修改您的代码,将
字符的地址传递给
%c
scanf
,除了第一个答案。
查看函数arrayFiller
如果(i%2==0 | | i==0)
是冗余的。如果(i%2==0)与
相同
检查字符的值时,应将其视为字符,您必须与字符进行比较,
'1'
1
不同,而且数字从0到9开始,而不是从1到10。因此,代替
while(v[i]<1 | | v[i]>10)
您应该像
while(v[i]<'0'| | v[i]>'9')那样进行比较

我不明白你所有职能的全部含义。您必须提供更多关于代码预期正确行为的详细信息。

好的,我知道英语不是您的第一语言,但是。。。。这个“e”是什么?阅读屏幕截图,看起来作者输入了一个存储的e,然后他们又输入了一个e,希望它被删除,而不是被删除。谢谢,你说得对,我会修复它的。我将数组改为char,效果很好:D