【发布时间】:2021-05-18 15:43:35
【问题描述】:
首先,我要感谢在上一期中帮助过我的所有人,这对我了解 C 程序如何在后台运行以及哪些循环用于什么方面有很大帮助。现在我遇到了这个任务:编写一个函数,用另一个随机数替换给定字符串(0、1、2、... 9)(ASCII 值:48、49、50、... 57)中的每个数字数字。字符串中的所有其他类型的数据都需要保持原样。该任务还说,在 main() 中,我应该创建一个能够容纳 50 个元素的字符串,并为 50 个 char 类型元素进行动态内存分配——内存处理的全部能力,最后打印出结果函数。
这是我目前写的:
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
char* switching(char s[]){
int i;
srand((unsigned)time(NULL));
for(i=0; i<strlen(s); i++){
if(s[i] > 57 || s[i] < 48){
s[i] = (float)rand()/RAND_MAX * 9;
}
}
return s;
}
int main(){
char *string = (char *)malloc(50);
fgets(string, 80, stdin);
if(string == NULL){
return 1;
}
char *r;
r = switching(string);
printf("%s" , r);
free(r);
return 0;
}
当我在 OnlineGDB 中运行它时,这就是我明显的错误(虽然可能有更多但我不确定):
Input: 1234abcd
Expected output: 5865abcd
Actual output: 1234
是的,就像上次一样,我们将不胜感激。提前感谢任何试图提供帮助的人。
编辑:在printf(); 中将"%c" 替换为"%s 并添加了fgets(string, 80, stdin);,但它仍然无法完全工作。
【问题讨论】:
-
好吧,
switching()返回一个char *,但是%c转换说明符需要一个int(这是在整数提升之后char发生的情况)。如果要打印字符串,请使用%s。
标签: c string pointers random dynamic-memory-allocation