【问题标题】:Splitting an input file into separate numbers and then using them as input into program将输入文件拆分为单独的数字,然后将它们用作程序的输入
【发布时间】:2013-01-09 17:06:07
【问题描述】:

我正在使用代码块并且碰壁了,我想从 .txt 文件中获取两个数字并将它们分配给不同的常量。

说在输入的.txt文件中有10,20我要让a=10和b=20,然后继续用这些数字做进一步的计算。

过去我使用 'strtok' 从文件中拆分出一个字符串,其中 (" ,:") 是分隔字符串。

FILE *fp; char s[1000];
fp=fopen("chris.txt","r"); // opens the file


if (!fp) return 1;
while (fgets(s,1000,fp)!=NULL); //makes the stuff inside the file defined as string s


char*pch;printf("Splitting string \"%s\" into tokens:\n",s);
pch = strtok (s,",");
while (pch !=NULL)
{
printf ("%s\n",pch);
pch= strtok(NULL," ,0.");
}

我想我可以采用类似的方式,但以某种方式将不同的数字分配给不同的常数。关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: c file input strtok split


    【解决方案1】:
    int a, b;
    
    if (sscanf(s, "%d,%d", &a, &b) != 2) {
        // Error, the format was not "<int>,<int>" 
    }
    

    你甚至可以使用scanf直接从文件中读取

    if (fscanf(fp, "%d,%d", &a, &b) != 2) {
    

    【讨论】:

    • 谢谢你,只是一个小问题,它们不是个位数,有没有办法让它在 10 和 20 中读取?
    • @chemistryprograms %d 不扫描单个数字,%d 表示“扫描整数”,意思是“读取尽可能多的数字,直到找到第一个非数字字符”。它可以与10,20 一起工作,试一试。只有当数字大于int 可以容纳的数字时,它才会失败。在这种情况下,您可以使用%ld 扫描long 值和%lld 扫描long long 值(当然,在这些情况下,a 和b 必须是longlong long 类型) .将%u%lu%llu 用于unsignedunsigned longunsigned long long
    • @chemistryprograms 也许您错误地认为%ddigit 的缩写,事实并非如此。 ddecimal 的缩写,十进制是基数为 10(十进制)的数字。这与 %x%o 不同,后者解析以 16 为底(heX)或以 8 为底(八进制)系统中的数字。
    【解决方案2】:

    使用 wxWidgets 框架,我通常使用wxTextInputStream 来执行这些任务。点击链接查看示例。

    如果wxWidgets 不是你的菜,它可能会给你一些想法。

    【讨论】:

    • 我没有注意到这不是 C++ 问题。我的错。
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多