仅读取字母-C

问题描述 投票:5回答:3

我正在打开一个文本文件,只想读字母单词。例如,如果我有一个文本文件为“ Hello-World Hey”。我想读“你好”,“世界”,“嘿”这两个字。

问题是我不确定此输出应使用的“格式说明符”。我已经尝试了无数种组合,但没有一个能如愿以偿。

FILE *fpin; 
char str[50];

while (fscanf(fpin, "%s[a-zA-Z]", str) != EOF) {
    // do something with str
}

任何帮助将不胜感激!谢谢。

c scanf
3个回答
8
投票

您快到了;应该使用扫描集,但是扫描集也没有s转换。

while (fscanf(fpin, "%49[a-zA-Z]", str) == 1) {

49防止缓冲区溢出(是的,它必须比数组的尺寸小1)。

当然,这适用于第一个单词;然后,您需要跳过非单词字符,然后才能阅读下一个单词,因此您可能需要:

while (fscanf(fpin, "%49[a-zA-Z]", str) == 1)
{
    ...do something with word in str...
    if (fscanf(fpin, "%49[^a-zA-Z]", str) != 1)
        ...decide what to do...
        ...but remember one problem might be that the 'word' was too long...
}

2
投票

我对自己编程非常陌生,但是也许这正是您想要的。希望对您有所帮助。

#include <ctype.h>

int i = 0;
FILE *fpin; 
char c, str[50];

while ((c = fgetc(fpin)) != EOF)
{
    if(isalpha(c))
        str[i++] = c;

}
str[i] = '\0';
// do something with str

-2
投票

我的代码中有同样的问题。我正在尝试使用

从文件中读取字母字符

char str_buffer[255]; int res = fscanf(fp, "%[a-zA-Z]", str_buffer)

我意识到我正在使用的%s修饰符会捕获一个单词,即使该单词包含特殊字符,也才意识到我不需要那个单词。现在,我使用%[a-zA-Z]来读取无字母单词,但之后只能读取文件的第一个单词fscanf返回0并在其内部循环其无穷大。

[int res = fscanf(fp, "%[a-zA-Z]", str_buffer)]第一次读取后,我得到res = 0。然后进入我的循环,res = 0,这是无限循环。

while (res == 0) { res = fscanf(fp, "%[a-zA-Z]", str_buffer); }

© www.soinside.com 2019 - 2024. All rights reserved.