lỗi ngay dòng fscanf_s(input,"%s",&tmp);
em đọc chuỗi thì bị lỗi này, kể cả đọc trực tiếp hay gián tiếp, fgets cũng lỗi. Lỗi này là do đâu ạ ?
Gặp lỗi này là sao ạ?
Thử bỏ & ở dòng lỗi đi xem tn!
thử sửa xem sao
for(int i=0; i<numName; i++)
Vẫn chưa sửa được ạ.
code đâu.đưa lên mới giúp dc chứ
đây ạ
// YCBT : Cho truoc mot bang ten, sau do cho query, moi query la mot ten
// Ta can tim vi tri cua query trong bang ten (x)
// Moi ten gom cac chu cai IN HOA , cach tinh gia tri moi ten : Vd: ABCD => 1+2+3+4=10 (y)
// Ket qua = x*y
#include <stdio.h>
#include <string.h>
char name[5200][15] = {};
int numName;
int binarySearch(char*);
int main()
{
int query,length;
char tmp[15] = {};
FILE*input, *output;
errno_t in, out;
in = fopen_s(&input, "Input.txt", "r");
out = fopen_s(&output, "Output.txt", "w");
fscanf_s(input, "%d", &numName);
//fflush(stdin);
//Doc list ten
for (int i = 1; i <= numName; i++)
{
fscanf_s(input, "%s", &tmp);
length = strlen(tmp);
for (int j = 0; j < length; j++) name[i][j] = tmp[j];
}
fscanf_s(input, "%d", &query);
for (int i = 1; i <= query; i++)
{
int posInName,sum=0;
fscanf_s(input, "%s", &tmp);
posInName = binarySearch(tmp); //Tim vi tri cua tmp trong name
for (int j = 0; j < length; j++) sum += tmp[j] - 64; //Vi trong ASCII chu A co gia tri 65 => can tru 64 de tro ve vi tri 1
fprintf(output, "%d\n", posInName*sum);
}
in = fclose(input);
out = fclose(output);
return 0;
}
int binarySearch(char*tmp)
{
for (int i = 1; i <= numName; i++)
{
if (strcmp(tmp, name[i]) == 0) return i;
}
}
Input
5
ALEX
LUIS
JAMES
BRIAN
PAMELA
1
PAMELA
Output
240
FEFEFEFE hình như là bẫy lỗi. Xem lại xem có add file input vào project chưa.
char tmp[15];
- bản chất xâu tmp là 1 mảng các char vì thế tmp là con trỏ trỏ tới mảng đó.
- hàm scanf_s của bạn dùng có chỗ truyền vào tham số “%s” thì phía sau phải con là con trỏ đến mảng chứa xâu s. vì thế bạn chỉ cần truyền vào tmp chứ không phải &tmp như trong code của bạn. Mình nghĩ lỗi do đó thôi:
fscanf_s(input, "%s", tmp);
Mình thử sửa lại rồi nhưng vẫn lỗi y như vậy . Dù sao cũng cảm ơn bạn
Là sao ạ? kiểm tra add như thế nào ạ ?
Mình đã tìm ra cách sửa, câu lệnh đúng sẽ là : fscanf_s(input, "%s", tmp,sizeof tmp);
. Nhưng mình thắc mắc tại sao phải thêm tham số như vậy ? Có bạn nào biết, giải thích giúp mình với.
Lưu ý fscanf_s là hàm không chuẩn. Đổi qua gcc là thấy ngay
Các hàm có đuôi _s thì cần thêm số kí tự hay số byte.
1 Like