我正在尝试制作一个需要扫描多个单词的程序,而且我不知道如何以未指定的长度执行此操作。 我的第一个停靠点是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()代码上,并且会粘在原始循环上。我该怎么做呢?
答案 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