问题是当我遍历数组时检测到“ \ n”。它曾经作为
显示在注释中,但之后不起作用。该程序的目标是从终端获取输入并将其放入数组。该数组不应包含任何“ \ n”。任何帮助表示赞赏,谢谢

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

// 1. Function must take input and place in array whilst making sure it does not overflow
// 2. Must return null if end of stdi is reached
// 3. Must ensure that it does not contain delimeter \n

// Tests:
// a) empty string
// b) string longer than buffer
// c) what happens when you press ctrl-d

char read_line(char *buf, size_t sz) {

        while(fgets(buf + strlen(buf), sz, stdin)){

                if (strlen(buf) < sz) {

                        if(buf[strlen(buf)-1] == '\n' ){
                                // IT GET'S DETECTED HERE WHEN THE ENTER
                                // BUTTON
                                // IS PRESSED BUT ...
                                break;
                        }
                }
        }

        // WHEN I LOOP THROUGH THE ARRAY IT GETS DETECTED AS SINGLE CHARS; '\'
        // AND 'n' DISTINCTLY
        for(int i = 0; i < strlen(buf)-1; ++i){
                if(buf[i] == '\n'){
                        printf("present");
                } else {
                        printf("x");
                }
        }
        return NULL;
}

int main(int argc, char *argv[]){

        char arra[20];
        size_t sz = sizeof(arra);

        memset(arra, 0, sz);

        printf("Enter command: \n");
        read_line(arra, sz);

        // Print elements in array
        printf("Printing out array: \n");
        for(int i = 0; i < strlen(arra); ++i){
                char c = arra[i];
                printf("%c", c);
        }
}

最佳答案

您似乎正在输入类似按键hello \ nENTER之类的信息。

两个不同字符\n的输入正好是两个不同字符。这与源中以\n表示的单个换行符完全不同。

就缓冲区将容纳的内容而言,它将是字符串"hello\\n\n",其中\\\字符,nn\n是换行符。



如果您要检测字符串中的换行符,则需要处理字符串中的每个字符。循环:

for (int i = 0; i < strlen(buf) - 1; ++i) ...


基本上会跳过最后一个字符,这对于忽略尾随换行符(如果它存在)是很好的,但是,如果要检测到它,则需要:

for (int i = 0; i < strlen(buf); ++i) ...

09-30 14:01
查看更多