所以我一直在编写一个程序,从命令行获取任何输入,直到'。'字符,然后打印出输入但线条反转。所以:
您好
世界。
变为
世界
您好
该问题应该用于练习链表,因此我使用链表存储每行输入(字符串),然后使用另一个列表来存储行。所以我想拥有它,以便将一个传入的字符放在字符串列表的末尾,直到' \ n'收到,然后这一行放在行列表的开头。我目前的代码工作正常,但在我看来逻辑非常混乱。但是,我无法提出其他正常运作的内容。
do {
string->first = string->last = NULL ; // 'empty' the list
while ((c = getchar ()) != '.') {
addToEndOfString (string, c) ; // puts a character at the end of a list of characters
if (c == '\n') break ;
}
addToStartOfList(l, str) ; // puts a pointer to a list of characters at the start of a list of pointers
} while (c != '.');
// print the list
有了这个,我也被迫打印' \ n'当我打印出每一行时,因为它们没有存储。
是否有更好(更清洁)的方法做同样的事情?
编辑:addToEndOFString
int addToEndOfString ( String *str , char c )
{
Character *a = malloc(sizeof(Character)) ;
a->val = c ;
a->next = NULL ;
if (str->first == NULL) {
str->first = a ;
str->last = a ;
} else {
str->last->next = a ;
str->last = a ;
}
return 0 ;
}
答案 0 :(得分:0)
使用fgets
#define MAX_BUF_SIZE 1024
char temp[MAX_BUF_SIZE] = "";
do {
fgets(temp, MAX_BUF_SIZE, stdin);
addToStartOfList(l, temp) ;
} while(strlen(temp) && (temp[strlen(temp) - 2] != '.'));