在C中扫描多个单词

时间:2012-03-10 17:56:52

标签: c char scanf fgets

我正在尝试制作一个需要扫描多个单词的程序,而且我不知道如何以未指定的长度执行此操作。 我的第一个停靠点是scanf,但这只扫描一个字(我知道你可以做scanf(“%d%s”,临时,临时);但我不知道它需要多少字,所以我环顾四周,找到了fgets。这个问题的一个问题是我无法找到如何使其转移到下一个代码,例如

scanf("%99s",temp);
printf("\n%s",temp);
if (strcmp(temp,"edit") == 0) {
  editloader();
}

将运行editloader(),同时:

fgets(temp,99,stdin);
while(fgets(temporary,sizeof(temporary),stdin))
    {
        sprintf(temp,"%s\n%s",temp,temporary);
    }   
if (strcmp(temp,"Hi There")==0) {
  editloader();
}

不会移动到strcmp()代码上,并且会粘在原始循环上。我该怎么做呢?

4 个答案:

答案 0 :(得分:0)

我会在每个循环中用scanf()扫描一个单词,然后用“main”字符串中的strcpy()复制它。

答案 1 :(得分:0)

也许你可以使用getline方法....我已经在vc ++中使用它但是如果它也存在于标准的c库中那么你很高兴去  点击这里http://www.daniweb.com/software-development/c/threads/253585 http://www.cplusplus.com/reference/iostream/istream/getline/

希望你能找到你想要的东西

答案 2 :(得分:0)

我使用它来从stdin中读取并获得与通过传递参数获得的格式相同的格式...这样您就可以在字符串中使用单词和引用的单词。如果你想从特定文件中读取,只需打开它并更改fgets行。

#include <stdio.h>
void getargcargvfromstdin(){
char s[255], **av = (char **)malloc(255 * sizeof(char *));
unsigned char i, pos, ac;
    for(i = 0; i < 255; i++)
        av[i] = (char *)malloc(255 * sizeof(char));
enum quotes_t{QUOTED=0,UNQUOTED}quotes=UNQUOTED;

while (fgets(s,255,stdin)){

i=0;pos=0;ac=0;
while (i<strlen(s)) {
    /* '!'=33, 'ÿ'=-1, '¡'=-95 outside of these are non-printables */
    if ( quotes && ((s[i] < 33) && (s[i] > -1) || (s[i] < -95))){ 
        av[ac][pos] = '\0';
        if (av[ac][0] != '\0')  ac++;
        pos = 0;
    }else{
        if (s[i]=='"'){  /* support quoted strings */
            if (pos==0){
                quotes=QUOTED;
            }else{      /* support \" within strings */
                if (s[i-1]=='\\'){
                    av[ac][pos-1] = '"';
                }else{  /* end of quoted string */
                    quotes=UNQUOTED;
                }
            }
        }else{          /* printable ascii characters */
            av[ac][pos] = s[i];
            pos++;
        }
    }
    i++;
}

//your code here ac is the number of words and av is the array of words
}
}

答案 3 :(得分:0)

如果它超过了缓冲区大小,您将无法执行。
您将必须执行多个循环

您可以使用scanf()进行扫描的最大尺寸来自

char *name; 
scanf("%s",name);

干这个

http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html