我尝试使用fgets
从stdin
读取,但是在小块中。我的问题是,我不确定在标准时间结束时fgets
等于什么。从我的代码来看,它似乎显然不是NULL
或像\n
那样的另一端。这样做的正确方法是什么?
代码(永远循环,因为fgets
永远不等于NULL
):
int main ()
{
char str1[4];
printf("Enter stuff: ");
while (fgets(str1, sizeof str1, stdin) != NULL &&
fgets(str1, sizeof str1, stdin) != "\n") {
printf("Got here");
}
printf("%s\n",str1);
return 0;
}
答案 0 :(得分:0)
更改
while(fgets(str1, sizeof str1, stdin) != NULL && fgets(str1, sizeof str1, stdin) != '\n'){
到
while(fgets(str1, sizeof str1, stdin) != NULL){
或
while(fgets(str1, sizeof str1, stdin)){
fgets
返回char*
。您无法将其与'\n'
char
进行比较。此函数在遇到NULL
时返回EOF
。您可以按
EOF
上模拟stdin
答案 1 :(得分:0)
你可以这样做:
while (fgets(str1, sizeof str1, stdin) != NULL && str1[0] != '\n')
如果fgets()
读取换行符,则会将其存储在字符串中,如果遇到NULL
则返回EOF
。
这样您就可以获得输入并测试fgets()
首先遇到EOF
,然后测试字符串中的第一个字符(str1[0]
)以查看它是否是换行符。
请记住fgets()
会返回char *
,因此您可以使用指针表示法*str1
或数组表示法str1[0]
来测试字符串的第一个字符。
答案 2 :(得分:-1)
// Rajat Sewal
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct island {
char *name;
char *opens;
char *closes;
struct island *next;
} island;
int main()
{
printf("This is an example of linked lists using a file to read the data needed!\n");
printf("to create the structs dynamically!\n\n\n");
// First we need a function called island that creates the new island struct
/********************************************/
island* create(char *name)
{
island *i = malloc(sizeof(island));
// set the fields on the new struct
i->name = strdup(name); // strdup duplicates the string so a NEW copy is used
i->opens = "09:00";
i->closes = "17:00";
i->next = NULL;
return i;
}
/********************************************/
void display(island *start)
{
island *i = start;
for (;i !=NULL; i = i->next) {
printf("Name: %s \n Open: %s-%s\n\n\n", i->name, i->opens,
i->关闭);
}
}
/ ****************************************** ****** /`
`island *start = NULL;`
`island *i = NULL;`
`island *next = NULL;`
`int j;`
`char name[80];`
`printf("Enter ^Z to finish [in windows]\n");`
`printf("Enter the names of the island you want to create:");`
`for(; (fgets(name, 80, stdin)!= NULL); i = next) {`
`printf("Enter the next name of the island you want to create:");`
`next = create(name);`
` if (start == NULL)`
` start = next;`
` if (i != NULL)`
`i->next = next;`
`}`
`display(start);`
`return 0;`
}