我正在尝试制作这个小程序。
有.txt文件:
namas house
katinas cat
suo dog
skaicius number
我想找到一个以特定单词开头的行,然后打印该行的第二个单词。
例如,用户输入单词katinas
。程序查看文件,找到以katinas
开头的行,最后打印。
到目前为止我所拥有的:
int main()
{
char word;
printf("Enter your word: ");
scanf("%s", &word);
FILE *fp;
fp = fopen("data.txt", "r+");
char buffer[256];
while (fgets(buffer, sizeof buffer, fp) != NULL && atoi(buffer) != word)
;
if (feof(fp))
{
printf(&buffer);
}
fclose(fp);
return 0;
}
谢谢。
答案 0 :(得分:2)
在其他地方指出的代码中有几个错误。这个答案会找到整个单词,例如" suo"但不是" su"。
#include<stdio.h>
#include<string.h>
int main()
{
char word[256]; // adequate string space (not single char)
char buffer[256];
char *sptr;
FILE *fp;
int found = 0;
printf("Enter your word: ");
scanf("%s", word); // requires a string pointer (note no &)
fp = fopen("data.txt", "r"); // removed "+"
if (fp) {
while (fgets(buffer, sizeof buffer, fp) != NULL) {
sptr = strtok(buffer, " \t\r\n");
if (sptr && strcmp(sptr, word) == 0) {
sptr = strtok(NULL, " \t\r\n");
if (sptr) {
printf("%s\n", sptr);
found = 1;
break;
}
}
}
fclose(fp);
}
if (!found)
printf ("%s not found\n", word);
return 0;
}
答案 1 :(得分:1)
你可以使用一个简单的逻辑,就像使用'for'搜索单词一样,在找到你想要的特定单词后立即使用'for'直到找到一个空格(使用''来确定一个单词的结尾和开头然后打印出所有字母,直到找到下一个空格''。这应该可以正常工作。
答案 2 :(得分:0)
char word;
是单个字符,无法存储行;应该是一个数组,以便读取一行。
atoi(buffer) != word
您正在将int
(由atoi()
返回)与指针进行比较(数组名称在此处转换为指针)。我真的没有看到这个目的。
您无需检查是否已到达文件末尾。您只需逐行遍历文件并检查字符串。
在没有格式说明符的情况下调用printf
并不安全,您也传递char (*)[256]
而printf
需要const char*
。
您还应该对fopen()
。
使用main()的标准原型,例如:int main(void)
在纠正所有这些后,代码将简化为:
#include<stdio.h>
#include<string.h>
int main(void)
{
char word[256] = {0};
char buffer[256] = {0};
FILE *fp;
printf("Enter your word: ");
scanf("%s", word);
fp = fopen("data.txt", "r+");
if (!fp) { /* error */}
while ( fgets(buffer, sizeof buffer, fp) )
{
if( strstr(buffer, word) == buffer )
printf("Found: %s\n", buffer);
}
return 0;
}
没有库函数可以找到C中的字符串“以...开头”。我正在使用strstr
来实现它。如果匹配和,它等于buffer
的起始地址,则以word
开头。因为strstr
返回指向第一个匹配的指针。
答案 3 :(得分:0)
return json_encode()