我正在尝试制作一个应将字符串分成两半的程序,但到目前为止,当我希望它读取用户编写的内容并使用字符串将其分成两半时,该程序正在打印出随机字母。另一件事是我不确定如何将拆分写成两部分(我将该部分写为str / 2)。
Configuration File (php.ini) Path: /etc/php/5.6/cli Loaded
Configuration File: /etc/php/5.6/cli/php.ini
Scan for additional .ini
files in: /etc/php/5.6/cli/conf.d Additional .ini
files parsed:/etc/php/5.6/cli/conf.d/10-mysqlnd.ini
答案 0 :(得分:0)
这可能是解决您的问题的方法,问题出在第1点,您可以使用情况A 或情况B 。这里的问题是,您同时使用了scanf
和fgets
函数,并且由于scanf
不消耗\n
和fgets
,您总是会得到一个\n
变量中的“空”字符串(仅为str
)。因此,在情况A 中,您只需使用另一个scanf
,在情况B 中,您需要使用最后一个\n
,然后读取所需的字符串。
除此之外,对于拆分部分,我仅使用一个简单的memcpy函数,并借助strlen将字符串拆分为一半以计算字符串的长度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int x;
printf("Pick the program that should be executed:\n");
printf(" 1. Split text\n Enter an option:\n");
scanf("%d", &x);
if (x == 1) {
printf("Write the text you want to use:\n");
char str[100];
// -- Point 1 --
// A
//scanf("%s", str);
// B
getchar();
fgets(str, 100, stdin);
// -------------
printf("Input was: %s\n", str);
int len = strlen(str);
char *left, *right;
left = malloc(len/2 + 1);
right = malloc(len/2 + 1);
memcpy(left, str, len/2);
left[len/2] = 0;
memcpy(right, str + len/2, len/2);
right[len/2] = 0;
// print the results
printf("Original : %s\nLeft side: %s\nRight side: %s\n\n", str, left, right);
// clean up
free(left);
free(right);
}
return 0;
}