【发布时间】:2018-12-05 14:53:19
【问题描述】:
此代码获取用户输入,然后使用 256% 长度的字符串。如果结果为 3 且输入为 abc,则输出为 bcd。这工作正常。但是,如果输入例如“hey whatsup”,则长度为 11,应该为 10,因为长度不应包含空格。
我如何对这段代码进行编程,使其不计入空间长度?
甚至可以在使用 fgets 的同时实现它吗?
提前谢谢你。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char array[20];
int length = 0;
int i;
int key = 256;
printf("input: ");
fgets(array, 20, stdin);
length = strlen(array) - 1;
key = key % length;
if (key > 0) {
for (i = 0; i < length; i++) {
if (array[i] == ' ') {
printf("%c", array[i]);
continue;
}
array[i] = array[i] + key;
printf("%c", array[i]);
}
}
return 0;
}
【问题讨论】:
-
你可以先去掉空格吗?
-
但我还是想打印出来
-
你可以计算空格然后从长度中减去?
-
那你需要一个单独的循环来统计空格的个数,并在
key的计算中减去它。 -
顺便说一下,
array[i] + key可能会导致算术溢出。并且取决于类型char是有符号还是无符号(由实现定义),这可能导致未定义的行为。它还可能导致array[i]的值变得无法打印。