|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目前想要解决 变量shanzifu会将回车也接收了,然后会进行一次shan()函数运行的问题
有想过进行接收判定,但是会提前用到shanzifu变量
目前希望有的两种解决方法:
1.接收回车再进行一次判定也没问题,但是不需要再打印一次“输入你要删除的字符”这一段话了
2.不接收回车
这个是要用外部函数来解决的一个作业
这个是外部函数
- #include <stdio.h>
- extern zifu[999], i;
- void shan(int zifu[999], int i)
- {
- char shanzifu;
- int chushi = 0;
- printf("输入你要删除的字符。\n");
- scanf_s("%c", &shanzifu);
- //shanzifu = getchar();
- for (;i >= chushi;chushi++)
- {
- if (zifu[chushi] != shanzifu)
- {
- printf("%c", zifu[chushi]);
- }
- else
- {
- ;
- }
- }
- printf("\n");
- i = 0;
- }
复制代码
这个是主函数
- #include <stdio.h>
- int zifu[999];
- int i = 0;
- void main()
- {
- printf("输入你的文章.\n");
- //scanf_s("%c", &zifu);
- while ((zifu[i] = getchar()) != '\n')
- {
- printf("%c", zifu[i]);
- i++;
- }
- printf("\n");
- while (1)
- {
- shan(zifu, i);
- }
- }
复制代码
谢谢。
在你的代码中,回车符('\n')被当作一个字符接收并存储到变量 shanzifu 中。如果你不希望接收回车符,可以使用以下两种方法解决:
方法一:在判定输入是否为回车之前先接收并丢弃回车符。
- scanf_s(" %c", &shanzifu); // 注意空格,它会跳过空白字符(包括回车符)
复制代码
这样, scanf_s 函数会自动跳过回车符并接收下一个非空白字符作为输入。
方法二:修改接收函数,使用 getchar 函数代替 scanf_s 来接收字符,并在循环中跳过回车符。
- #include <stdio.h>
- extern int zifu[999], i;
- void shan(int zifu[999], int i) {
- char shanzifu;
- int chushi = 0;
-
- printf("输入你要删除的字符。\n");
- shanzifu = getchar(); // 使用 getchar 接收字符
-
- while (shanzifu == '\n') { // 跳过回车符
- shanzifu = getchar();
- }
-
- for (; i >= chushi; chushi++) {
- if (zifu[chushi] != shanzifu) {
- printf("%c", zifu[chushi]);
- }
- }
-
- printf("\n");
- i = 0;
- }
- int main() {
- printf("输入你的文章.\n");
-
- while ((zifu[ i] = getchar()) != '\n') {
- printf("%c", zifu[ i]);
- i++;
- }
-
- printf("\n");
-
- while (1) {
- shan(zifu, i);
- }
-
- return 0;
- }
复制代码
这样, getchar 函数会逐个接收字符,并在循环中判断是否为回车符。如果是回车符,则继续接收下一个字符。
希望这些解决方法能帮助到你!如果有任何进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案
|
|