gpt4 book ai didi

c - 为什么 `n` 之前的输入语句中存在 `\n` 会给出错误的输出?

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:54 24 4
gpt4 key购买 nike

我想输入一个句子(包含任何可能的字符)并打印出来。但是有一个问题!如果句子中有\n,那么只打印\n之前的句子部分(即\n应该表示输入句子的结尾)。我为这种情况写了一个代码:

#include <stdio.h>
main()
{
char ch[100];
printf("Enter a sentence");
scanf("%99[^\\n]",&ch);
printf("%s",ch);
}

此代码似乎工作正常,但在某些情况下会失败。如果在 \n 之前的句子中的任何地方都有字符 n 那么它只打印句子的第一个单词!为什么会这样?我该如何修复这个错误?

这个案例很好用: enter image description here

但在这种情况下它失败了:

enter image description here


来自评论的细节:

Q:您是想在换行处停止,还是在反斜杠后跟 n 处停止?
A:斜杠后接 n

最佳答案

scanf()[] 转换说明符通过定义接受(或者,使用^,拒绝)集来工作 个字符。所以 %[^\\n] 将在第一个 \ 第一个 n 处停止扫描 -> 你scanf() 无法解决您的问题。

您应该只使用 fgets() 读取一行输入并使用 strstr() 搜索出现的 "\\n" >.


旁注:你的程序有错误:

char ch[100];
scanf("%99[^\\n]",&ch);

ch 计算为指向数组第一个元素的指针(因此,可以作为 scanf() 的参数),而 &ch 的计算结果为 指向数组的指针,这不是 scanf() 所期望的。

(类型不同,地址相同)

关于c - 为什么 `n` 之前的输入语句中存在 `\n` 会给出错误的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45760114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com