有人可以帮我解释一下 for 循环吗?

标签 c string reverse

#include <stdio.h>
#define MAXLINE 10

void reverse(char s[]);
void getline(char b[], int lim);

int main() {
char s[MAXLINE];
getline(s, MAXLINE);
reverse(s);
return 0;
}

void reverse(char s[]) {
    int i;
    int len = 0;
    for (i=0; s[i] != '\0'; i++) {
        len = len + 1;
    }
    char b[len + 1];
    for (i = 0; i < len; i++) {
        b[(len - 1) - i] = s[i];
    b[len] = '\0';
    }
    printf("%s : %s\n", s, b);
}

void getline(char b[], int lim) {
    char c;
    int i;
    for (i=0; i < lim-1 && (c = getchar())!= EOF && (c!='\n'); ++i) {
        b[i] = c;
    }
    if (c == '\n') {
        b[i] = '\n';
    }
}

为什么我在获取行功能时收到错误?它在 Xcode 中说“‘get line’的类型冲突。此外,在另一个错误中,它说“函数调用的参数太少,预期为 3 个,有 2 个?

有人可以解释 for 循环的“条件”部分的评估顺序吗? (我说的是&&)。非常感谢!!!

最佳答案

(1)..你的程序是正确的。但是,已经有一个库函数getline存在于库中。我们知道预定义函数的原型(prototype)声明存在于头文件中。对于 getline预定义函数,声明已存在于 stdio.h 中...在您的程序中,您还被声明为 getline 的原型(prototype)。我们很清楚,一个函数不可能有两个声明。所以只有你得到了错误。尝试用该函数的其他名称运行你的程序...

(2)..for (i=0; i < lim-1 && (c = getchar())!= EOF && (c!='\n'); ++i)

在 for 循环中,您正在检查三个条件..您也在检查 '\n' 。所以,您应该仅以字符串格式给出输入。但实际上它不是字符串。您应该连续给出字符作为输入,而不按输入。

关于有人可以帮我解释一下 for 循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598323/

相关文章:

c# - string.Format 抛出异常

c++ - 将 MSVS 2010 项目转换为 MSVS 2012 RC 但出现错误 "The C++ standard doesn' t 为此类型提供哈希”

iphone - 在iOS objective-c 中反向播放音频文件

python - 反转/反转字典映射

C - 将反转的文件内容打印到标准输出

c - 写入硬件 Controller 寄存器和 DMA 如何在 ARM arch 机器上工作?

c - 从 (char *) &(struct) 等结构将参数传递给读取函数

c - 嵌入式 C 数组索引文字与变量问题

c - 将静态数组作为参数传递

Javascript正则表达式替换下一个匹配