【发布时间】:2015-08-03 17:41:42
【问题描述】:
首先:对于提出这样一个需要关注的基本问题表示诚挚的歉意。我打算使用 getchar() 反转带有用户输入字符串的 char 数组,并使用 putchar() 显示它的反转。 [我知道使用 printf() 和 scanf() 可能有更简单或更优雅的方法,但我很想用 getchar() 和 putchar() 找出我的逻辑中的缺陷:]
#include <stdio.h>
#include <stdlib.h>
#define EOL '\n';
/* Reversing a character array */
int main()
{
int arr_char[10];
int i=0;
/* reading char elements into the array */
printf("Please input the array\n");
arr_char[0]= getchar();
while(arr_char[i]!= EOL && i<=9)
{
i=i+1;
arr_char[i]=getchar();
printf("\ni=%d\n",i);
}
/* display reverse */
while(i>=0)
{
putchar(arr_char[i]);
i--;
}
return 0;
}
1) 我收到一条错误消息:
reversing char array\main.c|15|error: expected ')' before ';' token|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|
仅供参考:第 15 行是
while(arr_char[i]!= EOL && i<=9)
2) 我还尝试打印计数器“i”,以查看在输入字符后按“Enter”时它是否正在递增,并且似乎确实如此。
3) 我已将 arr_char 数组定义为
int arr_char[10];
如果有人输入“-1”作为 EOF/EOL,那么 char 数组可能不会有太大帮助。我说的对吗?
任何有助于让我重新开始的解释将不胜感激。谢谢!
【问题讨论】:
-
阅读
#define等预处理器指令的语法及其工作原理。提示:它们不需要分号来终止替换文本。 -
谢谢!愚蠢的我,忽略了分号。但是,如何捕获“-1”或任何“Ctl-D”类型的条目来表示字段结束?
-
问这表明你真的应该读一本好的 C 书。您正在寻找
EOF(不一定是-1!)。ctrl-D实际上是关闭stdin的 Unix 键。请注意,这不是“字段结尾”,而是“文件结尾”!任何字段分隔符都是特定于应用程序的(换行符是文本的典型示例,例如) -
@neo "捕获 "-1" 或任何 "Ctl-D"" --> 类似
printf("Please input the array\n"); int ch; while (i < sizeof arr_char && (ch = getchar()) != EOL && ch != EOF) { arr_char[i++]=ch; } while(i>0) { putchar(arr_char[--i]); };