【问题标题】:Beginner's query: unable to reverse char array in C初学者的查询:无法在C中反转char数组
【发布时间】: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 &lt; sizeof arr_char &amp;&amp; (ch = getchar()) != EOL &amp;&amp; ch != EOF) { arr_char[i++]=ch; } while(i&gt;0) { putchar(arr_char[--i]); };

标签: c arrays


【解决方案1】:

#define 的末尾删除;。宏是使用文本替换完成的,因此使用分号,

while(arr_char[i]!= EOL && i<=9)

会变成:

while(arr_char[i]!= '\n'; && i<=9)

这是错误的。

您还有一个问题是您的代码可以写入到数组末尾的arr_char[10]。您需要增加数组大小,或将i&lt;=9 更改为i&lt;9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    相关资源
    最近更新 更多