读入输入,然后读入c编程中的每个字符
read in input, then read in each char in c programming
我正在做 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) 行将您输入的单词捕获到默认分隔符 space,然后继续打印 '|'然后角色尝试从标准输入中读取更多内容。
如果你进入say mylong的话你喜欢吗?然后 ctrl-z
你会看到:
| _w_o_r_d_ _d_o_ _y_o_u_ _l_i_k_e_ _i_t_?_
_^Z
|
这是因为人物字你喜欢吗?仍在待处理的流中。
如果您只输入一个没有 spaces 的单词,那么您将看到您观察到的内容。
两行:
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 中的每个字符,中间穿插 _ 字符。
我正在做 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) 行将您输入的单词捕获到默认分隔符 space,然后继续打印 '|'然后角色尝试从标准输入中读取更多内容。
如果你进入say mylong的话你喜欢吗?然后 ctrl-z
你会看到:
| _w_o_r_d_ _d_o_ _y_o_u_ _l_i_k_e_ _i_t_?_ _^Z |
这是因为人物字你喜欢吗?仍在待处理的流中。
如果您只输入一个没有 spaces 的单词,那么您将看到您观察到的内容。
两行:
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 中的每个字符,中间穿插 _ 字符。