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