【发布时间】:2017-11-10 00:05:01
【问题描述】:
当我遍历我的数组时,问题是检测到“\n”。它工作一次 在 cmets 中显示,但之后它不起作用。该程序的目标是从终端获取输入并将其放入数组中。该数组不应包含任何“\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);
}
}
【问题讨论】:
-
您是在终端中输入 \n 还是按回车键?
-
我都做了。例如:
-
您好 \n 随便什么 [然后我按回车键]
-
等等,所以你输入了一个反斜杠,然后是字母 n,然后你惊讶地发现数组中有一个反斜杠,然后是字母 n?这不就是它应该做的吗?当然数组包含你输入的内容!
-
不,它检测'\n'是否在数组中,如果它要打印它没有做的'present'!
标签: c arrays buffer stdin delimiter