Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我怎么能';t在fscanf中操作字符串 #包括 int main() { 文件*测试数据; 字符性别[10]={0}; 国际年龄[10]; 整数权重[10]; int x=0; testData=fopen(“newtext Document.txt”、“r”); if(testData==NULL){ printf(“错误!”); 申报表(1); } 而((fscanf(testData,“%s%s%s”,性别、年龄、体重))!=EOF){ printf(“%s\n%s\n%s\n”,性别、年龄、体重); 如果(性别=“M”| |性别=“M”| |性别=“F”){ printf(“hi”); } } fclose(testData); 返回0; }_Arrays_C_String_Scanf - Fatal编程技术网

Arrays 我怎么能';t在fscanf中操作字符串 #包括 int main() { 文件*测试数据; 字符性别[10]={0}; 国际年龄[10]; 整数权重[10]; int x=0; testData=fopen(“newtext Document.txt”、“r”); if(testData==NULL){ printf(“错误!”); 申报表(1); } 而((fscanf(testData,“%s%s%s”,性别、年龄、体重))!=EOF){ printf(“%s\n%s\n%s\n”,性别、年龄、体重); 如果(性别=“M”| |性别=“M”| |性别=“F”){ printf(“hi”); } } fclose(testData); 返回0; }

Arrays 我怎么能';t在fscanf中操作字符串 #包括 int main() { 文件*测试数据; 字符性别[10]={0}; 国际年龄[10]; 整数权重[10]; int x=0; testData=fopen(“newtext Document.txt”、“r”); if(testData==NULL){ printf(“错误!”); 申报表(1); } 而((fscanf(testData,“%s%s%s”,性别、年龄、体重))!=EOF){ printf(“%s\n%s\n%s\n”,性别、年龄、体重); 如果(性别=“M”| |性别=“M”| |性别=“F”){ printf(“hi”); } } fclose(testData); 返回0; },arrays,c,string,scanf,Arrays,C,String,Scanf,我不知道为什么性别不知道它的字母?我完全迷失在这一点上,控制年龄和体重是非常容易的,我只是无法触及性别。同样,如果我把M==77;它也不起任何作用 性别是单字母(F/M)正确的类型非常重要字符性别表示单个字符char-gender[10]表示一个由10个字符组成的数组:一个字符串 类似地,“M”是一个字符串,它是一个由单个字符加上一个空字节组成的数组,以指示字符串的结尾:{77,0}'M'是一个单个字符,整数77 gender==“M”比较两个字符,它们只是整数。实际上,它是性别==77。非性别

我不知道为什么性别不知道它的字母?我完全迷失在这一点上,控制年龄和体重是非常容易的,我只是无法触及性别。同样,如果我把M==77;它也不起任何作用


性别是单字母(F/M)

正确的类型非常重要<代码>字符性别表示单个字符
char-gender[10]
表示一个由10个字符组成的数组:一个字符串

类似地,
“M”
是一个字符串,它是一个由单个
字符加上一个空字节组成的数组,以指示字符串的结尾:
{77,0}
'M'
是一个单个
字符,整数77

gender==“M”
比较两个字符,它们只是整数。实际上,它是
性别==77
。非
性别[0]==77
gender
是一个内存地址,是一个随机整数,因此不起作用

gender==“M”
也不起作用<代码>=
不会比较字符串文字,它是。相反,您需要使用该函数<代码>strcmp(性别,“M”)==0

或者,您可以将
gender
切换为单个
char
,将
fscanf
切换为使用
%c
,并执行
gender='M'| gender='F'

具体取决于格式


您的
年龄
体重
也有问题。这些是指向10个整数数组的指针,但您将它们用作字符串。这只能靠运气。发生的事情是
int age[10]
分配80字节的内存(8字节整数*10)。当与
%s
一起用作
char*
(字符串)时,此空间可容纳80个字符(每个字符80字节/1字节)。C实际上并不关心类型,它会很高兴地使用你给它的任何内存,只要它适合。。。有时即使没有

我们可以通过在读取“23”后将
age
打印为整数(在使用
int age[10]={0};
初始化它以避免读取垃圾)来看到这一点

为什么是13106?即(十六进制)32表示“2”,33表示“3”,0表示空字节。这是一个a,所以它的读法是相反的:003332,十进制是13106

您应该做的是
int age
,使用
%d
格式,并将其作为指针传入


把这一切放在一起

printf("Ints %d %d %d\n", age[0], age[1], age[2]);  // 13106 0 0
#包括
#包括
int main()
{
文件*测试数据;
//{0}更简单地写为空字符串。
字符性别[10]=“”:
智力年龄;
整数权重;
testData=fopen(“test.txt”、“r”);
if(testData==NULL){
printf(“错误!”);
申报表(1);
}
//fscanf接受指针。性别已经是指针了。年龄和体重不是指针
//需要操作员记录他们的地址(&O)。
而((fscanf(测试数据,“%s%d%d”,性别、年龄和体重))!=EOF){
printf(“%s\n%d\n%d\n”,性别、年龄、体重);
//将字符串与strcmp进行比较
如果(strcmp(性别,“M”)=0 | | strcmp(性别,“F”)=0){
printf(“hi”);
}
}
fclose(testData);
返回0;
}

字符串和字符不一样,这里的性别应该是
字符
,并使用
%c
进行解析,如果您希望将其保留为字符串,则需要使用
strcmp
。激活编译器的警告将帮助您创建一行
New Text Document.txt
是什么样子的?strcmp是答案@Ôrel我很感激
printf("Ints %d %d %d\n", age[0], age[1], age[2]);  // 13106 0 0
#include <stdio.h>
#include <string.h>

int main()
{
    FILE *testData;
    // { 0 } is more simply written as an empty string.
    char gender[10] = "":
    int age;
    int weight;

    testData = fopen("test.txt", "r");
    if(testData == NULL){
        printf("Error!");
        return (1);
    }

    // fscanf takes pointers. gender is already a pointer. age and weight are not and
    // need the & operator to take their address.
    while( (fscanf(testData, "%s%d%d", gender, &age, &weight)) != EOF){
        printf("%s\n%d\n%d\n", gender, age, weight);

        // Compare strings with strcmp
        if(strcmp(gender, "M") == 0 || strcmp(gender, "F") == 0) {
            printf("hi");
        }
    }

    fclose(testData);
    return 0;
}