gpt4 book ai didi

c - 读入输入,然后读入c编程中的每个字符

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

我正在研究 kernigan 和 ritchie 教科书中的一个练习题(同样是为了练习,而不是为了学分)。

问题是编写一个程序,打印输入中单词长度的直方图。

我想通过为我读取的每个字符打印一个“_”来做到这一点。但是,我在阅读字符时遇到了很多麻烦。

现在,我的程序是这样的:

int main(){

int c;
char str[100];
scanf("%s", str);
printf("|");
while((c = getchar()) != EOF){
putchar(c);
printf("_");
}

printf("|");
return 0;

主要编译。但是,当我尝试使用它并给它一个词(任意长度)时,它只会打印:|_

然后光标移动到下划线旁边。我究竟做错了什么?为什么在“|”后面打印下划线而不是在它旁边,因为我没有使用\n ?

最佳答案

您看到的输出是因为 scanf("%s", str) 行将您输入的单词捕获到默认分隔符(空格),然后继续打印 '|'然后角色尝试从标准输入读取更多信息。

如果你进入say mylong word你喜欢吗?然后按 ctrl-z

你会看到:

| _w_o_r_d_ _d_o_ _y_o_u_ _l_i_k_e_ _i_t_?__^Z|

这是因为人物字你喜欢吗?仍在待处理的流中。

如果您只输入一个没有空格的单词,那么您将看到您观察到的内容。

两行:

char str[100];
scanf("%s", str);

可以被删除,这样你就不会捕捉到这个词并且什么也不做。

或者,如果您想使用 scanf,您可以这样更改:

#include <stdio.h>

int main(){
char str[100];
char* p = str;
scanf("%s", str);
printf("|");
while (*p != NULL) {
putchar(*p++);
printf("_");
}
printf("|");
return 0;
}

此代码打印 str 中的每个字符,中间穿插 _ 字符。

关于c - 读入输入,然后读入c编程中的每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39680871/

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