#include<stdio.h>
int main() {
int index=0;
char str[1000];
char c;
while((c=getchar())!='/') {
while((c=getchar())!='\n') {
scanf("%c",&str[index]);
index++;
}
str[index]='\n';
index++;
}
str[index]='\0';
printf("%s",str);
return 0;
}
我以多行的形式提供输入,我想以与提供的输入类似的方式显示输出,我正在使用&#39; /&#39;字符作为输入的结束,现在我没有得到输出,如何解决这个问题?
答案 0 :(得分:2)
从stdin
中读取字符时,如果您要终止'/'
上的读取,则有三个条件可以防范:
index + 1 < 1000
(以防止超出并保留空间
nul-terminatedating char)(c = getchar()) != '/'
(您选择的终结者);和c != EOF
(您不希望在设置EOF
后阅读
流)将这些部分放在一起,您可以这样做:
#include <stdio.h>
#define MAXC 1000 /* define a constant (macro) for max chars */
int main (void) {
int c, idx = 0;
char str[MAXC] = ""; /* initialize your array (good practice) */
/* read each char up to MAXC (-2) chars, stop on '/' or EOF */
while (idx + 1 < MAXC && (c = getchar()) != '/' && c != EOF)
str[idx++] = c; /* add to str */
str[idx] = 0; /* nul-terminate (optional here if array initialized, why?) */
printf ("%s", str);
return 0;
}
(我会鼓励在putchar ('\n');
之后printf
(或者只是将'\n'
添加到格式字符串)以防止输入而没有最终的POSIX 行尾,例如,如果在'/'
停止,或者到达1000
个字符,或者从不包含POSIX EOL的重定向文件中读取)
示例输入文件
$ cat ../dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.
示例使用/输出
$ ./bin/getchar_io <../dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.
仔细看看,如果您有任何问题,请告诉我。
答案 1 :(得分:1)
为什么不用这个? :
#include <stdio.h>
int main() {
int index=0;
char str[1000];
char c;
while((c=getchar())!='/') {
str[index] = c;
index++;
}
str[index]='\0';
printf("%s",str);
return 0;
}