【发布时间】:2018-09-21 23:14:01
【问题描述】:
我想用 C 语言编写一个程序,将小写字母更改为大写字母,反之亦然,包括 .要么 -。当我给它一个没有符号的输入时,它工作得很好,但是当我插入符号时,程序会打印随机字符。我对此感到困惑,我不知道为什么会发生这种情况。
我已经看到了两个类似问题的帖子,但仍然没有弄清楚我的问题,这两个帖子是:
- Why does it print random symbols when exceeding 44 characters
- Random symbols after manipulating a char array in C
输入示例1:
asd.DSA
输出示例1:
ASD.dsa
1-\y�
输入示例2:
asdDSA
输出示例 2:
ASDdsa
代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
int main(void) {
pid_t readWrite;
pid_t changeString;
readWrite = fork();
if(readWrite == 0) {
char str[49];
while(fgets(str, 50, stdin) != NULL) {
printf("%s", str);
changeString = fork();
if(changeString == 0) {
int result = 0;
char newstr[49];
for(int i = 0; i < strlen(str); i++) {
if(str[i] >= 'A' && str[i] <= 'Z') {
newstr[result++] = str[i] + 32;
} else if (str[i] >= 'a' && str[i] <= 'z') {
newstr[result++] = str[i] - 32;
} else {
newstr[result++] = str[i];
}
}
printf("%s", newstr);
break;
}
}
}
while(wait(NULL)>0);
return 0;
}
【问题讨论】:
-
很好minimal reproducible example,+1,只是缺少标题。
-
if(str[i] >='A' && str[i] <='Z') {更易于人类阅读。 -
抱歉已经改了。
-
你为什么要分叉?
-
我使用 fork 是因为目标是第一个进程读取输入并打印输出,而第二个进程用于更改字母,但由于我有这个错误我还没有实现那个。
标签: c string printf uppercase lowercase