gpt4 book ai didi

C-转换类型字符 '0' 和 '[' 格式 [-Wformat=] 且参数过多

转载 作者:行者123 更新时间:2023-11-30 18:29:31 27 4
gpt4 key购买 nike

我遇到了两个错误。我在网站上进行了搜索,发现转换类型字符和太多参数错误来自 sscanfprintf,它们发生在我的文件中的第 166 和 186 行。代码。

代码处理从文本文件收集的一些信息(如姓名、城市、州、出生日期、电子邮件地址等)。我相信这与我的 % 符号或括号格式 [^\n] 有关。我看到另一篇文章,其中括号内定义了某些字符,如下所示: %40[A-Za-z0-9._@] %[A-Za-z ] 但我不知道是否这就是我需要做的至少解决未知转换类型字符问题。任何帮助,将不胜感激。变量在我的 .h 文件中声明,但名称前的小写字母(cszi)代表 char、char数组和整数。

这里是错误来源的部分代码。我注释掉了一个 return 语句,因为该代码使用的方法是 void:

    iScanfCnt = sscanf(szInputBuffer, "%1c %1s %4s %30[^\n] %30[^\n] %2s %2s %5s %s %d\n"
, &customer.cGender
, customer.szBirthDt
, customer.szEmailAddr
, customer.szFullName
, customer.szStreetAddress
, customer.szCity
, customer.szStateCd
, customer.szZipCd
, flight.szFlightId
, &flight.iRequestSeats);

// Check for bad input. scanf returns the number of valid conversions
if (iScanfCnt < 10)
{
printf("invalid input when reading student data, only %d valid values. \n"
, iScanfCnt);
printf("\tdata is %s\n", szInputBuffer);
//return ERR_MISSING_SWITCH;
}
printf("%1s %10.2s %10.2s %30[^n] %30[^n] %10.2s %2s %5s %s %d\n"
, &customer.cGender
, customer.szBirthDt
, customer.szEmailAddr
, customer.szFullName
, customer.szStreetAddress
, customer.szCity
, customer.szStateCd
, customer.szZipCd
, flight.szFlightId
, &flight.iRequestSeats);
}

我的错误:

p1xxxxxx.c: In function 'processReservations':

p1xxxxxx.c:166:4: warning: unknown conversion type character '0' in format [-Wformat=]
, &flight.iRequestSeats);
^

p1xxxxxx.c:166:4: warning: too many arguments for format [-Wformat-extra-args]

p1xxxxxx.c:186:5: warning: unknown conversion type character '[' in format [-Wformat=]
, &flight.iRequestSeats);
^

p1xxxxxx.c:186:5: warning: unknown conversion type character '[' in format [-Wformat=]

p1xxxxxx.c:186:5: warning: too many arguments for format [-Wformat-extra-args]

出了什么问题?

最佳答案

这是您的代码的工作示例

#include <stdio.h>

struct x
{
char cGender;
char szBirthDt[200];
char szEmailAddr[200];
char szFullName[200];
char szStreetAddress[200];
char szCity[200];
char szStateCd[200];
char szZipCd[200];

};

struct y
{
char szFlightId[200];
int iRequestSeats;
};

int main(void) {
struct x customer;
struct y flight;
int iScanfCnt;
char* szInputBuffer = "m a bbbb cccccc\nsome text\nde fg hijkl mnop 10";

iScanfCnt = sscanf(szInputBuffer, "%1c %1s %4s %30[^\n] %30[^\n] %2s %2s %5s %s %d\n"
, &customer.cGender
, customer.szBirthDt
, customer.szEmailAddr
, customer.szFullName
, customer.szStreetAddress
, customer.szCity
, customer.szStateCd
, customer.szZipCd
, flight.szFlightId
, &flight.iRequestSeats);

if (iScanfCnt < 10)
{
printf("invalid input when reading student data, only %d valid values. \n"
, iScanfCnt);
printf("\tdata is %s\n", szInputBuffer);
return -1;
}

// Fix: %c %s %s
printf("%1c %10.2s %10.2s %30s %30s %10.2s %2s %5s %s %d\n"
, customer.cGender // Fix: no &
, customer.szBirthDt
, customer.szEmailAddr
, customer.szFullName
, customer.szStreetAddress
, customer.szCity
, customer.szStateCd
, customer.szZipCd
, flight.szFlightId
, flight.iRequestSeats); // Fix: no &

return 0;
}

我只需要修复 printf - sscanf 工作正常。

输出:

m          a         bb                         cccccc                      some text         de fg hijkl mnop 10

参见https://ideone.com/ipAHIb

关于C-转换类型字符 '0' 和 '[' 格式 [-Wformat=] 且参数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com